sqlite学習ノート7:C言語でsqliteを使用してデータベースを開く
データベースの基本的な内容は前からあまり悪くありません.次に、C言語でsqliteをどのように使うかを見てみましょう.
1つのインタフェース
SQLITE_BUSY
二例
1ディレクトリ構造
Projects{
main.c//コード所在ファイル
sqlite{//公式サイトからダウンロードしたsqlite圧縮パッケージ解凍後のファイルディレクトリ
shell.c//このファイルはプロジェクトでは実際には使用できません.このファイルはsqliteコマンドツールを生成するために使用されます.具体的には、sqlite学習ノート1を参照してください.
sqlite3.c
sqlite3.h
sqlite3ext.h
)
)
2ソースコード
実行には2つの方法があります.前のノートに基づいて、sqliteの環境を構成していません.ダウンロードして解凍してフォルダsqliteをリストするだけです.そのため、次のコマンドが必要です.
#コンパイル時にg++を使用すると、エラーが発生します. error: invalid conversion from ‘const void*’ to ‘const char*’
g++はタイプ変換に厳しいようで、このような変換はサポートされていません.
通りすがりの大侠、どのようにg++でコンパイルすることを知っていて、教えてください......
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++でコンパイルすることを知っていて、教えてください......