sqlite学習ノート7:C言語でsqliteを使用してデータベースを開く


データベースの基本的な内容は前からあまり悪くありません.次に、C言語でsqliteをどのように使うかを見てみましょう.
1つのインタフェース
sqlite3_open(const char *filename, sqlite3 **ppDb)
データベースを開き、データベースが存在しない場合は新しいデータベースを作成して開きます.
sqlite3_close(sqlite3*)
データベースを閉じます.閉じる前に実行されていない文がある場合は、
SQLITE_BUSY
二例
1ディレクトリ構造
Projects{
main.c//コード所在ファイル
       sqlite{//公式サイトからダウンロードしたsqlite圧縮パッケージ解凍後のファイルディレクトリ
       shell.c//このファイルはプロジェクトでは実際には使用できません.このファイルはsqliteコマンドツールを生成するために使用されます.具体的には、sqlite学習ノート1を参照してください.
sqlite3.c
sqlite3.h
sqlite3ext.h
)
)
2ソースコード
// main.c
#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NAME "hanfeng.db"

int main()
{
    sqlite3* db = NULL ;
    char* msg = NULL ;
    int ret = 0 ;
    
    ret = sqlite3_open(DB_NAME, &db);
    if (ret){
        fprintf(stderr, "error open datebase:%s
.", DB_NAME) ; exit(0) ; } else{ fprintf(stdout, "successfully open datebase.
") ; } sqlite3_close(db) ; return 0; }
今後の拡張を容易にするため、コードを以下のように修正します.
#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NANE "sqlite/test.db"

sqlite3 *db = NULL;
char* sql = NULL;
char *zErrMsg = NULL;
int ret = 0;

typedef enum{
    false,
    true
} bool;

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
    int i = 0;
    for(i=0; i < argc; i++){
        printf("%s = %s
", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("
"); return 0; } bool connectDB() { ret = sqlite3_open(DB_NANE, &db); if( ret != SQLITE_OK){ fprintf(stderr, "Error open database: %s
", sqlite3_errmsg(db)); sqlite3_free(zErrMsg); return false; } fprintf(stdout, "Successfully opened database
"); return true; } bool closeDB() { int ret = 0; ret = sqlite3_close(db); if ( ret == SQLITE_BUSY ){ return false; } return true; } int main(int argc, char* argv[]) { connectDB(); closeDB(); return 0; }
3コンパイル運転
実行には2つの方法があります.前のノートに基づいて、sqliteの環境を構成していません.ダウンロードして解凍してフォルダsqliteをリストするだけです.そのため、次のコマンドが必要です.
gcc -o main main.c ./sqlite/sqlite3.c -lpthread -ldl
ダウンロード構成にsqliteがインストールされている場合は、上のヘッダファイルの内容を次のように変更する必要があります.
#include <sqlite3.h>
次に、コマンドを実行します.
gcc -o main main.c  -lsqlite3
コマンドの実行が完了するとmainという実行可能ファイルが生成され、次のように入力されます.
./main
結果も見えます.
#コンパイル時にg++を使用すると、エラーが発生します. error: invalid conversion from ‘const void*’ to ‘const char*’
g++はタイプ変換に厳しいようで、このような変換はサポートされていません.
通りすがりの大侠、どのようにg++でコンパイルすることを知っていて、教えてください......