必须使用 sqlite3_finalize(sqlite3_stmt *pStmt);这是为sqlite3_prepare语句使用这个函数去销毁以防止内存泄露。如果不使用,则返回值为(SQLITE_BUSY)5,且下一次无法写入数据库数据,只能读。
QT添加sqlite3库及头文件,在.pro文件中加入链接.so及.h文件,路径需一致。例:
unix:!macx: LIBS += -L ./ -lsqlite3
INCLUDEPATH += ./
在有则打开,无则新建数据库。用int sqlite3_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\n" , sqlite3_errmsg(db));
ALOGE(" Can't open database :%s\n" , sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
关闭数据库。用int rc=sqlite3_close(sqlite3 **ppDb );例:
int rc=sqlite3_close(db) ;
创建表及增、删、改都用int sqlite3_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 ) ;
查找,并打印数据,查找完成后,必须使用 sqlite3_finalize(sqlite3_stmt *pStmt);这是为sqlite3_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()<<"name:"<<(const char*)sqlite3_column_text(pStmt, 0);
qDebug()<<"age:"<<(const char*)sqlite3_column_text(pStmt, 1);
}
sqlite3_finalize(pStmt);