sqlite3中有5种数据类型:int real text null blob
但sqlite3中的列的数据类型不是固定的,列的数据类型随着实际插入的数据的格式而定;
在sqlite3中使用sql时,有一个非常有趣而有强大的概念:相似类型。引入相似类型的概念,主要是为了兼容各种数据库(sqlserver oracle MysqL等)的sql语法。
int sqlite3_open(const char * filepath,sqlite3 **ppDb)
打开一个数据库连接,filepath就是数据库文件,如果数据库文件不存在,该函数会创建这个数据库文件。
ppDb是输出参数,当成功创建数据库连接时,(*ppDb)会指向一个sqlite3对象;当创建数据库连接失败是,(*ppDb)为NULL。
当成功创建数据库连接时,此函数返回sqlITE_OK,否则返回错误代号。
打开数据链接后,我们一般需要执行一些sql语句,在执行sql之前,需要编译这些sql语句:
sqlite3_prepare_v2(sqlite3 *pDb,const char * psql,int nBytes,sqlite3_stmt **ppSamt,const char **pTail)
调用此函数时,我们一般将 nBytes设为-1,这表示我们希望编译由psql指定的sql语句: psql开始到\0结尾的字符串,该字符串会被视为用UTF-8编码
而将**pTail设为NULL
ppStamt为输出参数,当成功编译sql语句时,(*ppStmt)会指向一个sqlite3_stmt对象;当编译sql语句失败时,(*ppStmt)会被设为NULL。
当成功编译sql语句时,此函数返回sqlITE_OK,否则返回错误代号
例子: sqlite3_preapare_v2(pDb,"create table TestTable(string TEXT)",-1,ppStmt,NULL)
有个函数非常利于调试用,它是const char *sqlite3_errmsg(sqlite3 *pDb),此函数返回上次操作sqlite3数据时,识别的错误的信息。
注意:此函数的返回的 字符串,不需我们自己调用sqlite3_free()释放。
如:if(sqlite3_prepare_v2(..) != sqlITE_OK){
printf("error message:",sqlite3_errmsg(pDb));
}
编译好sql语句后,我们就需要执行这些语句:
int sqlite3_step(sqlite3 *pDb,sqlite3_stmt *pStmt)
sql语句是insert、delete、drop或delete时,只需调用此函数一次,然后检查它是否返回sqlITE_DONE即可;
如果sql语句是select,因为select可能返回多行数据,此时,此时,每调用一次sqlite3_step()就相当fetch下一行数据,当sqlite3_step()成功fetch一行数据时,返回sqlITE_ROW,当fetch完所有的数据时,再调用sqlite3_step()后会返回sqlITE_DONE
当不在需要使用sqlite3_stmt对象时,需要调用sqlite_finalize(sqlite3_stmt *pStmt)释放掉
原文链接:https://www.f2er.com/sqlite/201867.html