SQLite教程:C语言编程实例代码

一、获取表的Schema消息:

1卡塔尔. 动态创制表。

2卡塔尔(قطر‎.
依据sqlite3提供的API,获取表字段的音讯,如字段数量以致种种字段的品种。

3卡塔尔国. 删除该表。

见之下代码及注重注释:复制代码
代码如下:#include sqlite3.h#include string

using namespace std;

void doTest(){ sqlite3* conn = NULL; //1. 张开数据库 int result =
sqlite3_open(“D:/mytest.db”,&conn); if (result != SQLITE_OK) {
sqlite3_close(conn); return; } const char* createTableSQL = “CREATE
TABLE TESTTABLE (int_col INT, float_col REAL, string_col TEXT)”;
sqlite3_stmt* stmt = NULL; int len = strlen(createTableSQL卡塔尔(قطر‎; //2.
准备开创数据表,如果创设战败,供给用sqlite3_finalize释放sqlite3_stmt对象,避防守内部存储器走漏。
if (sqlite3_prepare_v2(conn,createTableSQL,len,&stmt,NULL) !=
SQLITE_OK) { if (stmt) sqlite3_finalize(stmt); sqlite3_close(conn);
return; } //3.
通过sqlite3_step命令实施创制表的言语。对于DDL和DML语句来说,sqlite3_step实行科学的回来值
//只有SQLITE_DONE,对于SELECT查询来讲,若是有数据重返SQLITE_ROW,当抵达结果集末尾时则赶回
//SQLITE_DONE。 if (sqlite3_step(stmt) != SQLITE_DONE) {
sqlite3_finalize(stmt); sqlite3_close(conn卡塔尔国; return; } //4.
释放创立表语句对象的能源。 sqlite3_finalize(stmt卡塔尔(قطر‎; printf(“Succeed to
create test table now./n”State of Qatar; //5. 布局查询表数据的sqlite3_stmt对象。
const char* selectSQL = “SELECT * FROM TESTTABLE WHERE 1 = 0”;
sqlite3_stmt* stmt2 = NULL; if
(sqlite3_prepare_v2(conn,selectSQL,strlen(selectSQL),&stmt2,NULL) !=
SQLITE_OK) { if (stmt2) sqlite3_finalize(stmt2); sqlite3_close(conn卡塔尔国;
return; } //6. 依照select语句的对象,获取结果聚集的字段数量。 int
田野同志Count = sqlite3_column_count(stmt2State of Qatar; printf(“The column count is
%d./n”,田野(field卡塔尔Count卡塔尔国; //7.
遍历结果聚集每一个字段meta音讯,并赢得其声称时的类型。 for (int i = 0; i
田野先生Count; ++i卡塔尔(قطر‎ {
//由于这时Table中并空头支票数量,再有便是SQLite中的数据类型本人是动态的,所以在一直不数量时
//不能通过sqlite3_column_type函数获取,那个时候sqlite3_column_type只会回去SQLITE_NULL,
//直到有多少时能力再次来到具体的体系,由此这里运用了sqlite3_column_decltype函数来收获表声
//明时给出的宣示类型。 string stype =
sqlite3_column_decltype(stmt2,i); stype =
strlwr((char*)stype.c_str(State of Qatar卡塔尔(قطر‎; //上边包车型地铁分析准则见该体系的“数据类型–1.
决定字段亲情性的平整”部分,其链接如下: // if (stype.find(“int”卡塔尔国 !=
string::npos) { printf(“The type of %dth column is INTEGER./n”,i); }
else if (stype.find(“char”) != string::npos || stype.find(“text”) !=
string::npos) { printf(“The type of %dth column is TEXT./n”,i); } else
if (stype.find(“real”) != string::npos || stype.find(“floa”) !=
string::npos || stype.find(“doub”) != string::npos ) { printf(“The type
of %dth column is DOUBLE./n”,i); } } sqlite3_finalize(stmt2卡塔尔国; //8.
为了便于下二回测量检验运行,我们那边须要删除该函数成立的数据表,不然在下一次运行时将不或者//创设该表,因为它早就存在。 const char* dropSQL = “DROP TABLE
TESTTABLE”; sqlite3_stmt* stmt3 = NULL; if
(sqlite3_prepare_v2(conn,dropSQL,strlen(dropSQL),&stmt3,NULL) !=
SQLITE_OK) { if (stmt3) sqlite3_finalize(stmt3); sqlite3_close(conn);
return; } if (sqlite3_step(stmt3) == SQLITE_DONE) { printf(“The test
table has been dropped./n”); } sqlite3_finalize(stmt3);
sqlite3_close(conn);}

int main(卡塔尔(قطر‎{ doTest(卡塔尔(قطر‎; return 0;}//输出结果为://Succeed to create test
table now.//The column count is 3.//The type of 0th column is
INTEGELX570.//The type of 1th column is DOUBLE.//The type of 2th column is
TEXT.//The test table has been dropped.

二、常规数量插入:

1卡塔尔. 创制测量试验数据表。 2卡塔尔国. 通过INSERT语句插入测验数据。 3卡塔尔(قطر‎. 删除测量检验表。
见以下代码及主题注释:

复制代码 代码如下:#include
sqlite3.h#include string#include stdio.h

using namespace std;

void doTest(){ sqlite3* conn = NULL; //1. 展开数据库 int result =
sqlite3_open(“D:/mytest.db”,&conn); if (result != SQLITE_OK) {
sqlite3_close(conn); return; } const char* createTableSQL = “CREATE
TABLE TESTTABLE (int_col INT, float_col REAL, string_col TEXT)”;
sqlite3_stmt* stmt = NULL; int len = strlen(createTableSQLState of Qatar; //2.
筹划开创数据表,倘诺创设退步,必要用sqlite3_finalize释放sqlite3_stmt对象,以制止内部存款和储蓄器走漏。
if (sqlite3_prepare_v2(conn,createTableSQL,len,&stmt,NULL) !=
SQLITE_OK) { if (stmt) sqlite3_finalize(stmt); sqlite3_close(conn);
return; } //3.
通过sqlite3_step命令实施创立表的讲话。对于DDL和DML语句来说,sqlite3_step实行科学的归来值
//独有SQLITE_DONE,对于SELECT查询来讲,固然有多少重回SQLITE_ROW,当达到结果集末尾时则赶回
//SQLITE_DONE。 if (sqlite3_step(stmt) != SQLITE_DONE) {
sqlite3_finalize(stmt); sqlite3_close(conn卡塔尔国; return; } //4.
释放创造表语句对象的财富。 sqlite3_finalize(stmt); printf(“Succeed to
create test table now./n”);

int insertCount = 10; //5. 创设插入数据的sqlite3_stmt对象。 const
char* insertSQL = “INSERT INTO TESTTABLE VALUES(%d,%f,’%s’)”; const
char* testString = “this is a test.”; char sql[1024]; sqlite3_stmt*
stmt2 = NULL; for (int i = 0; i insertCount; ++i) {
sprintf(sql,insertSQL,i,i * 1.0,testString); if
(sqlite3_prepare_v2(conn,sql,strlen(sql),&stmt2,NULL) != SQLITE_OK) {
if (stmt2) sqlite3_finalize(stmt2); sqlite3_close(conn); return; } if
(sqlite3_step(stmt2) != SQLITE_DONE) { sqlite3_finalize(stmt2);
sqlite3_close(conn); return; } printf(“Insert Succeed./n”); }
sqlite3_finalize(stmt2State of Qatar; //6.
为了方便下贰次测验运维,我们那边须求删除该函数创立的数据表,不然在下一次运作时将无法//成立该表,因为它曾经存在。 const char* dropSQL = “DROP TABLE
TESTTABLE”; sqlite3_stmt* stmt3 = NULL; if
(sqlite3_prepare_v2(conn,dropSQL,strlen(dropSQL),&stmt3,NULL) !=
SQLITE_OK) { if (stmt3) sqlite3_finalize(stmt3); sqlite3_close(conn);
return; } if (sqlite3_step(stmt3) == SQLITE_DONE) { printf(“The test
table has been dropped./n”); } sqlite3_finalize(stmt3);
sqlite3_close(conn);}

int main(卡塔尔(قطر‎{ doTest(卡塔尔; return 0;}//输出结果如下://Succeed to create test
table now.//Insert Succeed.//Insert Succeed.//Insert Succeed.//Insert
Succeed.//Insert Succeed.//Insert Succeed.//Insert Succeed.//Insert
Succeed.//Insert Succeed.//Insert Succeed.//The test table has been
dropped.

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图