# HaxeでSQLite

開発メモです。

WindowsでSQLiteが標準で簡単に使えて依存するライブラリなしのexeファイルを作成できて比較的最近の言語、という制限でHaxeを選びました。嘘です、趣味です。
Rustを勉強したかったけどSQLiteの導入ができませんでした。誰か教えて下さい。

import sys.db.Sqlite;

class Main{
    public static function main(){
        createUserTable();
        addUser("USER001", "Honda");
        addUser("USER002", "Suzuki");
        addUser("USER003", "Kawasaki");
        showUsers();
    }
    public static function createUserTable(){
        var dbCon:sys.db.Connection =  Sqlite.open("test.db");
        var sql = "
            create table if not exists user(
                user_id varchar(256),
                name varchar(256)
            )
        ";
        dbCon.startTransaction();
        try{
            dbCon.request(sql);
        }catch(e:Dynamic){
            dbCon.rollback();
            dbCon.close();
            throw e;
        }
        dbCon.commit();
        dbCon.close();
    }
    public static function addUser(id:String, name:String){
        var dbCon:sys.db.Connection =  Sqlite.open("test.db");
        var sql = 'insert into user values("$id", "$name");';
        dbCon.startTransaction();
        try{
            dbCon.request(sql);
        }catch(e:Dynamic){
            dbCon.rollback();
            dbCon.close();
            throw e;
        }
        dbCon.commit();
        dbCon.close();
    }
    public static function showUsers(){
        var dbCon:sys.db.Connection =  Sqlite.open("test.db");
        var sql = "select * from user;";

        var resSet = dbCon.request(sql);
        while(resSet.hasNext()){
            trace(resSet.getResult(0) + " : " + resSet.getResult(1));
            resSet.next();
        }
        dbCon.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

実行は以下のコマンドで。SQLiteが使えるTargetは限られています。 --interpは使えません。ここではnekoを使います。

haxe -main Main --neko sqlite.n
neko sqlite.n
1
2

出力

Main.hx:50: USER001 : Honda
Main.hx:50: USER002 : Suzuki
Main.hx:50: USER003 : Kawasaki
1
2
3