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ファイル、パスは一致する必要があります.例:
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()<