int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ );
sqlite3_open 打开一个由文件名参数 filename 指定的SQLite数据库文件。如果成功打开数据库,则返回 SQLITE_OK 。
int sqlite3_prepare_v2( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ );
db 指向打开的数据库。
zSql 指向sql语句。
nByte 如果是负数则zSql将会被读到空字符‘\0‘为止,否则从zSql中读取n个字节。
ppStmt 是我们传入 sqlite3_stmt 结构指针的地址。
pzTail 简单用法直接传递nullptr。
sqlite3_prepare_v2将zSql 翻译成字节码程序存储在 sqlite3_stmt中并返回给我们指针。(官网上没找到原话。己见!!!)
如果成功,则返回 SQLITE_OK 。
int sqlite3_step(sqlite3_stmt*);
如果正在执行的SQL语句返回任何数据,那么每当有一行新数据准备好由调用者处理时,就返回SQLITE_ROW。可以使用列访问函数访问这些值。再次调用sqlite3_step()来检索下一行数据。(自动执行sqlite3_reset() )
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
返回iCol列的数据(从0开始)。
int sqlite3_finalize(sqlite3_stmt *pStmt);
成功返回 SQLITE_OK
int sqlite3_close(sqlite3*);
成功返回 SQLITE_OK
#include <iostream> #include <stdio.h> #include <string> #include "sqlite3.h" using namespace std; int main() { char dbPath[] = "./test.db"; char zSql[] = "select * from user"; sqlite3 * db; sqlite3_stmt * pStmt; int rv = sqlite3_open(dbPath, &db); char * value; if(rv != SQLITE_OK){ fprintf(stderr, "cant‘t open db\n"); return -1; } rv = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); if(rv != SQLITE_OK){ fprintf(stderr, "compiled failed\n"); return -2; } while(sqlite3_step(pStmt) == SQLITE_ROW){ int len = sqlite3_column_count(pStmt); for(int i = 0; i < len ;i++){ value = (char *)sqlite3_column_text(pStmt, i); printf("%s\t\t", value); } printf("\n"); } sqlite3_close(db); return 0; }
P.S.
编译是需要使用动态库。
我的命令: g++ msqlite3.cpp -l sqlite3
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
原文:https://www.cnblogs.com/sau-autumnwind/p/13928946.html