2013年1月27日日曜日

[SQLite][SQL]MinGW, MSYS 環境での sqlite のコンパイル・使用方法

  1. sqlite3 の関数を使用するプログラムを準備する。
    main.c
    #include 
    #include "sqlite3.h"
    
    static int callback(void *NotUsed, int argc, char **argv, char **azColName)
    {
        int i;
        for (i = 0; i < argc; i++) {
            printf("%s = %s\n", azColName[i], (argv[i] ? argv[i] : "NULL"));
        }
        printf("\n");
    
        return 0;
    }
    
    // メイン関数
    int main(int argc, char **argv)
    {
        sqlite3 *db;
        int rc;
        char *zErrMsg = 0;
    
        if (argc != 3) {
            fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
            return -1;
        }
    
        rc = sqlite3_open(argv[1], &db);
        if (rc) {
            fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
            sqlite3_close(db);
            return -1;
        }
    
        rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
        if (rc != SQLITE_OK) {
            fprintf(stderr, "SQL error: %s\n", zErrMsg);
            sqlite3_free(zErrMsg);
        }
        sqlite3_close(db);
    
        return 0;
    }
    
  2. Makafile を準備する。
    Makefile
    CC=gcc
    CFLAGS = -Wall
    LDFLAGS = -lsqlite3
    TARGET = \
         main.exe
    
    .SUFFIXES: .exe .c .o
    
    .c.o:
         $(CC) $(CFLAGS) -c -o $@ $<
    
    .o.exe:
     $(CC) -o $@ $< $(LDFLAGS)
    
    default: $(TARGET)
    
    clean:
     rm -rf *.o *.exe
    
  3. コンパイルをする
  4. 実行して動作確認する。第 1 引数はデータベースファイル名、第 2 引数に SQL 文を渡す。
    > a.exe test.db "CREATE TABLE test_tbl(ID INT PRIMARY KEY, NAME TEXT NOT NULL);"
    > a.exe test.db "INSERT INTO test_tbl(ID, NAME) values (0, 'hoge');"
    > a.exe test.db "SELECT * from test_tbl;"
    ID = 0
    NAME = hoge
    
    > a.exe test.db "INSERT INTO test_tbl(ID, NAME) values (1, 'aaa');"
    > a.exe test.db "SELECT * from test_tbl;"
    ID = 0
    NAME = hoge
    
    ID = 1
    NAME = aaa
    

0 件のコメント:

コメントを投稿