https://blog.csdn.net/mindlead/article/details/51648649 原来一直使用sqlite3_get_table,发现效率低下,而且官方推荐使用sqlite3_prepare_v2替代,特继续学习
#pragma comment(lib, "sqlite3.lib") static int callback(void *NotUsed, int argc, char **argv, char **azColName){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); const unsigned char *pTmp; int nRet = sqlite3_open("e:\\db\\people.db",&pdb); assert(SQLITE_OK == nRet); const char *sql = "CREATE TABLE IF NOT EXISTS person(name VARCHAR(128)," nRet = sqlite3_exec(pdb,sql,NULL,NULL,&zErrMsg); sql = "DELETE FROM person;"; nRet = sqlite3_exec(pdb,sql,NULL,NULL,&zErrMsg); sql = "INSERT INTO person(name,age,sex) VALUES(\"Alice\",15,\"woman\");"; nRet = sqlite3_exec(pdb,sql,NULL,NULL,&zErrMsg); assert(SQLITE_OK == nRet); // 为了简单,这里不打印zErrMsg的值 sql = "INSERT INTO person(name,age,sex) VALUES(\"Bob\",18,\"man\");"; nRet = sqlite3_exec(pdb,sql,NULL,NULL,&zErrMsg); assert(SQLITE_OK == nRet); // 为了简单,这里不打印zErrMsg的值 sql = "INSERT INTO person(name,age,sex) VALUES(\"Charli\",11,\"man\");"; nRet = sqlite3_exec(pdb,sql,NULL,NULL,&zErrMsg); assert(SQLITE_OK == nRet); // 为了简单,这里不打印zErrMsg的值 printf("=====query by sqlite3_exec()=====\n"); sql = "SELECT name,age,sex FROM person;"; nRet = sqlite3_exec(pdb,sql,callback,NULL,&zErrMsg); assert(SQLITE_OK == nRet); // 使用sqlite3_prepare_v2(), sqlite3_bind_...() 插入数据 sql = "INSERT INTO person(name,age,sex) VALUES(?,?,?);"; nRet = sqlite3_prepare_v2(pdb,sql,strlen(sql),&pstmt,&pzTail); assert(SQLITE_OK == nRet); for (i=0;i<sizeof(a)/sizeof(per);i++) sqlite3_bind_text(pstmt,nCol++,a[i].name,strlen(a[i].name),NULL); sqlite3_bind_int(pstmt,nCol++,a[i].age); sqlite3_bind_text(pstmt,nCol++,a[i].sex,strlen(a[i].sex),NULL); // 使用sqlite3_prepare_v2(), sqlite3_column_...() 查询数据 printf("====== query by sqlite3_prepare_v2()======\n"); sql = "SELECT name,age,sex FROM person;"; nRet = sqlite3_prepare_v2(pdb,sql,strlen(sql),&pstmt,&pzTail); assert(SQLITE_OK == nRet); while(sqlite3_step(pstmt) == SQLITE_ROW) pTmp = sqlite3_column_text(pstmt,nCol++); age = sqlite3_column_int(pstmt,nCol++); pTmp = sqlite3_column_text(pstmt,nCol++);
|