QTはsqlite 3 APIの添削を用いて調べる.sqlite3_close SQLITE_BUSY問題
sqlite 3_を使用する必要がありますfinalize(sqlite3_stmt *pStmt);これはsqlite 3_ですprepare文は、メモリの漏洩を防ぐためにこの関数を使用して破棄されます.使用しない場合、戻り値は(SQLITE_BUSY)5で、次回はデータベースデータの書き込みができず、読み取りのみとなります.
QTはsqlite 3ライブラリとヘッダファイルを追加し、.Proファイルにリンクを追加する.so及hファイル、パスは一致する必要があります.例:
ある場合は開いて、ない場合は新しいデータベースを作成します.int sqlite 3_でopen(const char *filename , sqlite3 **ppDb );例:
データベースを閉じます.int rc=sqlite 3_でclose(sqlite3 **ppDb );例:
テーブルの作成、削除、変更はint sqlite 3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
テーブルの作成-例:
追加内容-例:
削除内容-例:
変更内容-例:
データを検索して印刷し、検索が完了したらsqlite 3_を使用する必要があります.finalize(sqlite3_stmt *pStmt);これはsqlite 3_ですprepare文は、メモリの漏洩を防ぐためにこの関数を使用して破棄されます.使用しない場合は、戻り値は5で、次回はデータベースデータを書き込めません.
QTはsqlite 3ライブラリとヘッダファイルを追加し、.Proファイルにリンクを追加する.so及hファイル、パスは一致する必要があります.例:
unix:!macx: LIBS += -L ./ -lsqlite3
INCLUDEPATH += ./
ある場合は開いて、ない場合は新しいデータベースを作成します.int sqlite 3_でopen(const char *filename , sqlite3 **ppDb );例:
int rc;
sqlite3 *db=nullptr;
sqlite3_stmt * pStmt = NULL;
rc = sqlite3_open( "test.db" , &db);
if( rc) {
qDebug(" Can't open database :%s
" , sqlite3_errmsg(db));
ALOGE(" Can't open database :%s
" , sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
データベースを閉じます.int rc=sqlite 3_でclose(sqlite3 **ppDb );例:
int rc=sqlite3_close(db) ;
テーブルの作成、削除、変更はint sqlite 3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
テーブルの作成-例:
char *zErr ;
int rc;
char *sql;
sql="create table TestTable1(name text ,age text) ";
rc = sqlite3_exec(db , sql, NULL , NULL , &zErr ) ;
sql="create table TestTable2(sex text ,year text) ";
rc = sqlite3_exec(db , sql, NULL , NULL , &zErr ) ;
追加内容-例:
char *error ;
int rc;
char *sql;
sql = "insert into TestTable1 values ('xiaoming','12' )";
rc = sqlite3_exec(db , sql, NULL , NULL , &error ) ;
削除内容-例:
char *error ;
int rc;
char *sql;
sql = "delete from TestTable1 where name='xiaoming'";
rc = sqlite3_exec(db , sql, NULL , NULL , &error ) ;
変更内容-例:
char *error ;
int rc;
char *sql;
sql = "update TestTable1 set name='zhangsan' where name='xiaoming'";
rc = sqlite3_exec(db , sql, NULL , NULL , &error ) ;
データを検索して印刷し、検索が完了したらsqlite 3_を使用する必要があります.finalize(sqlite3_stmt *pStmt);これはsqlite 3_ですprepare文は、メモリの漏洩を防ぐためにこの関数を使用して破棄されます.使用しない場合は、戻り値は5で、次回はデータベースデータを書き込めません.
int rc;
char *sql;
char buf1[20],buf2[20];
sql= "select * from TestTable1 where name='xiaoming'";
rc = sqlite3_prepare_v2(db , sql, -1 , &pStmt , NULL ) ;
if(rc == SQLITE_OK)
while (sqlite3_step(pStmt) == SQLITE_ROW)
{
qDebug()<