sqlite3数据库函数

xiaoxiao2021-02-28  120

数据库操作的基本步骤: 0.连接数据库 1.打开数据库 2.操作数据库 3.关闭数据库 sqlite3的基本元素: 两个对象与八个方法 一.封装系列 1.建立连接、打开数据库 int sqlite3_open(   const char *filename,   /* 字符串形式的数据库名(UTF-8),存在则打开,不存在则创建 */   sqlite3 **ppDb          /* 输出:连接对象 */ ); 返回值:成功返回SQLITE_OK 其它值表示失败 //获取错误信息 const char *sqlite3_errmsg(sqlite3*); 2.操纵数据库 int sqlite3_exec(   sqlite3*,                                  /* 代表打开的数据库 */   const char *sql,                           /* 字符串形式的SQL语句 */   int (*callback)(void*,int,char**,char**),  /* 回调函数 */   void *,                                    /* 回调函数的第一个参数 */   char **errmsg                              /* 错误信息写在此处 */ ); 注: 如果要执行的SQL语句没有结果集返回(create,insert,update,delete等),那么就不需要写回调函数 如果要执行的SQL语句有结果集返回(select),那就必须写一个回调函数去获取返回的结果集 回调函数: int callback( void* arg, //exec的第四个参数 int  columnCount, //列的数目 char** columnValues, //列值数组 char** columnNames  //列名数组 ) 只要查询到一条记录,该回调函数就调用一次 返回值必须是正常返回,即return 0; 3.关闭数据库 int sqlite3_close(sqlite3*) gcc 01sqlite3_exec.c -I/home/csgec/build/sqlite3-pc/include/   -L/home/csgec/build/sqlite3-pc/lib   -lsqlite3 --------------------------------------------------- --------------------------------------------------- ---------------------------- 练习:使用sqlite3函数 #include<stdio.h> #include<sqlite3.h> /// /home/csgec/build/sqlite3-pc/include int main() { //1建立连接,打开数据库 sqlite3 *db; int res = sqlite3_open("/home/csgec/test.db",&db); if(res != SQLITE_OK) { fprintf(stderr,"open db err:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return 1; } printf("open or creat db ok!\n"); //2.操纵数据库 char *errmsg; char *createSql = "create table if not exists tb_stu(id integer primary key ,name text not null,age integer);"; res = sqlite3_exec(db,createSql,NULL,NULL,&errmsg); if(res != SQLITE_OK) { fprintf(stderr,"exec error:%s\n",errmsg); sqlite3_close(db); return 1; } printf("exec ok!\n"); int id; char name[20]; int age; scanf("%d%s%d",&id,name,&age); char insertSql[1024]; sprintf(insertSql,"insert into tb_stu values(%d,'%s',%d);",id,name,age); printf("insertSql = %s\n",insertSql); res = sqlite3_exec(db,insertSql,NULL,NULL,&errmsg); if(res != SQLITE_OK) { fprintf(stderr,"insert error:%s\n",errmsg); sqlite3_free(errmsg); sqlite3_close(db); return 1; } //3.关闭数据库 sqlite3_close(db); return 0; } --------------------------------------------------- --------------------------------------------------- ---------------------------- 练习:回调函数的使用 #include<stdio.h> #include<sqlite3.h> // -I /home.... int callback(void *arg,int count,char **names,char **values); int main() { sqlite3*db; int res = sqlite3_open("/home/csgec/test.db",&db); if(res != SQLITE_OK) { fprintf(stderr,"open db err: %s \n",sqlite3_errmsg(db)); sqlite3_close(db); return -1; } char *selectSql = "select id,name,age from tb_stu;"; char *errmsg; res = sqlite3_exec(db,selectSql,callback,NULL,&errmsg); if(res != SQLITE_OK) { fprintf(stderr,"exec err: %s \n",errmsg); sqlite3_free(errmsg); sqlite3_close(db); return -1; } sqlite3_close(db); return 0; } int callback(void *arg,int count,char **values,char **names) { printf("count = %d\n",count); int i; for(i = 0; i < count; i++) { printf("%s\t",names[i]); } printf("\n"); for(i = 0; i < count; ++i) { printf("%s\t",values[i]); } printf("\n"); return 0; } --------------------------------------------------- --------------------------------------------------- ---------------------------- 二.详细系列 1.建立连接、打开数据库 int sqlite3_open(   const char *filename,   /* 字符串形式的数据库名(UTF-8),存在则打开,不存在则创建 */   sqlite3 **ppDb          /* 输出:连接对象 */ ); 返回值:成功返回SQLITE_OK 其它值表示失败 //获取错误信息 const char *sqlite3_errmsg(sqlite3*); 2.准备/编译SQL语句 int sqlite3_prepare_v2(   sqlite3 *db,            /* 打开的数据库 */   const char *zSql,       /* 原始的字符串形式的SQL语句*/   int nByte,              /* 字符串形式的SQL语句的长度,单位是字节 */   sqlite3_stmt **ppStmt,  /* 输出:字节码形式的SQL语句对象 */   const char **pzTail     /* 输出: 指向字符串SQL语句中未使用的部分,一般给NULL */ ); 返回值:成功返回SQLITE_OK 其它值表示失败 3.执行语句对象 int sqlite3_step(sqlite3_stmt*); 参数:字节码形式的SQL语句对象 返回值:如果你的SQL语句没有返回结果集,成功返回SQLITE_DONE 如果你的SQL语句有返回结果集,成功返回SQLITE_ROW 其它值表示失败 4.销毁语句对象 int sqlite3_finalize(sqlite3_stmt *pStmt); 参数:字节码形式的SQL语句对象 返回值:成功返回SQLITE_OK 其它值表示失败 5.关闭数据库 int sqlite3_close(sqlite3*) 编译.c文件,需要连接数据库(sqlite3数据库的下载与安装请见另一篇文章sqlite3数据库ubuntu移植&arm开发板移植) gcc 01sqlite3_exec.c -I/home/csgec/build/sqlite3-pc/include/   -L/home/csgec/build/sqlite3-pc/lib    -lsqlite3 ---------------------------- ---------------------------- ---------------------------- ---------------------------- 绑定值: int sqlite3_bind_blob (sqlite3_stmt*, int, const void*, int n, void(*)(void*)); int sqlite3_bind_double (sqlite3_stmt*, int, double); int sqlite3_bind_int (sqlite3_stmt*, int, int); int sqlite3_bind_null (sqlite3_stmt*, int); int sqlite3_bind_text (sqlite3_stmt*, int,const char*,int,void(*)(void*)); 第一个参数:语句对象 第二个参数:索引位置,即要把值绑定到哪个位置,下标从1开始计 第三个参数:要绑定的值 第四个参数:要绑定的值的长度 第五个参数:函数指针,清理函数,一般给NULL 返回值:成功返回SQLITE_OK 其它表示失败 重置语句对象: sqlite3_reset(sqlite3_stmt*) ---------------------------- ---------------------------- ---------------------------- ---------------------------- 练习:绑定值函数的使用 #include<stdio.h> #include<sqlite3.h> /// /home/csgec/build/sqlite3-pc/include #include<string.h> int main() { //1建立连接,打开数据库 sqlite3 *db; int res = sqlite3_open("/home/csgec/test.db",&db); if(res != SQLITE_OK) { fprintf(stderr,"open db err:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return 1; } printf("open or creat db ok!\n"); //2.操纵数据库 int id; char name[20]; int age; char *insertSql = "insert into tb_stu values(?,?,?);"; sqlite3_stmt *stmt; res = sqlite3_prepare_v2(db,insertSql,strlen(insertSql),&stmt,NULL); if(res != SQLITE_OK) { fprintf(stderr,"prepare error:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return -1; } printf("prepare ok!\n"); while(1) { scanf("%d%s%d",&id,name,&age); sqlite3_bind_int(stmt,1,id); sqlite3_bind_text(stmt,2,name,strlen(name),NULL); sqlite3_bind_int(stmt,3,age); //3.执行 res = sqlite3_step(stmt); printf("step res = %d\n",res); if(res != SQLITE_DONE) { fprintf(stderr,"step error:%s\n",sqlite3_errmsg(db)); } sqlite3_reset(stmt); } //4.销毁 sqlite3_finalize(stmt); //5.关闭数据库 sqlite3_close(db); return 0; } ---------------------------- ---------------------------- ---------------------------- ---------------------------- 获取列值: const void *sqlite3_column_blob (sqlite3_stmt*, int iCol); int sqlite3_column_bytes (sqlite3_stmt*, int iCol); double sqlite3_column_double (sqlite3_stmt*, int iCol); int sqlite3_column_int (sqlite3_stmt*, int iCol); const unsigned   char *sqlite3_column_text (sqlite3_stmt*, int iCol); 第一个参数:语句对象 第二个参数:下标位置,返回的一条记录的某列的下标,从0开始计 sqlite3_column_count sqlite3_column_type sqlite3_column_name ---------------------------- ---------------------------- ---------------------------- ---------------------------- 练习:获取列值函数的使用 #include<stdio.h> #include<sqlite3.h> /// /home/csgec/build/sqlite3-pc/include #include<string.h> int main() { //1建立连接,打开数据库 sqlite3 *db; int res = sqlite3_open("/home/csgec/test.db",&db); if(res != SQLITE_OK) { fprintf(stderr,"open db err:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return 1; } printf("open or creat db ok!\n"); //2.操纵数据库 char *selectSql = "select id,name,age from tb_stu;"; sqlite3_stmt *stmt; res = sqlite3_prepare_v2(db,selectSql,-1,&stmt,NULL); if(res != SQLITE_OK) { fprintf(stderr,"prepare err:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return 1; } res = sqlite3_step(stmt); while(res == SQLITE_ROW) { int id = sqlite3_column_int(stmt,0); const char*name = sqlite3_column_text(stmt,1); int age = sqlite3_column_int(stmt,2); printf("%d\t%s\t%d\n",id,name,age); res = sqlite3_step(stmt); } //4.销毁 sqlite3_finalize(stmt); //5.关闭数据库 sqlite3_close(db); return 0; }
转载请注明原文地址: https://www.6miu.com/read-69836.html

最新回复(0)