使用C语言操作Sqlite数据库
来源:互联网 发布:汤灿到底怎么了知乎 编辑:程序博客网 时间:2024/05/23 19:18
在工作中,我总是使用编译后sqlite3可执行程序,进行数据库的创建;其实我们操作sqlite数据库,
也可是使用源代码级别的形式去操作数据库。我在网上查找,对部分代码进行修改,添加上注释,
我使用的ubuntu10.04自带的gcc编译器gcc4.4.3进行编译。
如果你使用 $ gcc sqlitetest.c
进行编译时,会出现如下的错误:
/tmp/ccyxvdme.o: In function `main':
sqlitetest.c:(.text+0x31): undefined reference to `sqlite3_open'
sqlitetest.c:(.text+0x48): undefined reference to `sqlite3_errmsg'
sqlitetest.c:(.text+0xa5): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0xd6): undefined reference to `sqlite3_free'
sqlitetest.c:(.text+0x102): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x12e): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x15a): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x166): undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
这是因为gcc找不到定义sqlite3_open等等的头文件,经过在网上查找资料,
找到了解决方法,使用如下的方法进行编译:
$ gcc -o hello -L /usr/local/sqlite-autoconf-3070400/lib -I/usr/local/sqlite-autoconf-307040/include sqlitetest.c -lsqlite3
上面的编译主要意义时-L 代码你安装sqlite3类库所在的路径, -I代表安装sqlite3的头文件路径 而-l表示
可执行程序的名称
经过上面的编译,即可成功。
执行结果如下:
~$ ./hello
数据库连接成功!
插入数据成功
插入数据成功
查询数据库内容
userid = 张三
age = 20
birthday = 2011-7-23
userid = 李四
age = 20
birthday = 2012-9-20
数据库关闭成功!
也可是使用源代码级别的形式去操作数据库。我在网上查找,对部分代码进行修改,添加上注释,
形式如下代码,其中包含对数据表的创建,添加数据,查询数据功能,代码如下:
#include <stdio.h>#include <sqlite3.h>//查询的回调函数声明int select_callback(void * data, int col_count, char ** col_values, char ** col_Name);int main(int argc, char * argv[]){ const char * sSQL1 = "create table users(userid varchar(20) PRIMARY KEY, age int, birthday datetime);"; char * pErrMsg = 0; int result = 0; // 连接数据库 sqlite3 * db = 0; int ret = sqlite3_open("./test.db", &db); if( ret != SQLITE_OK ) { fprintf(stderr, "无法打开数据库: %s", sqlite3_errmsg(db)); return(1); } printf("数据库连接成功!\n"); // 执行建表SQL sqlite3_exec( db, sSQL1, 0, 0, &pErrMsg ); if( ret != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", pErrMsg); sqlite3_free(pErrMsg); } // 执行插入记录SQL result = sqlite3_exec( db, "insert into users values('张三',20,'2011-7-23');", 0, 0, &pErrMsg); if(result == SQLITE_OK){ printf("插入数据成功\n"); } result = sqlite3_exec( db, "insert into users values('李四',20,'2012-9-20');", 0, 0, &pErrMsg); if(result == SQLITE_OK){ printf("插入数据成功\n"); } // 查询数据表 printf("查询数据库内容\n"); sqlite3_exec( db, "select * from users;", select_callback, 0, &pErrMsg); // 关闭数据库 sqlite3_close(db); db = 0; printf("数据库关闭成功!\n"); return 0;}int select_callback(void * data, int col_count, char ** col_values, char ** col_Name){ // 每条记录回调一次该函数,有多少条就回调多少次 int i; for( i=0; i < col_count; i++){ printf( "%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i] ); } return 0;}编写好代码后,我们需要进行编译。
我使用的ubuntu10.04自带的gcc编译器gcc4.4.3进行编译。
如果你使用 $ gcc sqlitetest.c
进行编译时,会出现如下的错误:
/tmp/ccyxvdme.o: In function `main':
sqlitetest.c:(.text+0x31): undefined reference to `sqlite3_open'
sqlitetest.c:(.text+0x48): undefined reference to `sqlite3_errmsg'
sqlitetest.c:(.text+0xa5): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0xd6): undefined reference to `sqlite3_free'
sqlitetest.c:(.text+0x102): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x12e): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x15a): undefined reference to `sqlite3_exec'
sqlitetest.c:(.text+0x166): undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
这是因为gcc找不到定义sqlite3_open等等的头文件,经过在网上查找资料,
找到了解决方法,使用如下的方法进行编译:
$ gcc -o hello -L /usr/local/sqlite-autoconf-3070400/lib -I/usr/local/sqlite-autoconf-307040/include sqlitetest.c -lsqlite3
上面的编译主要意义时-L 代码你安装sqlite3类库所在的路径, -I代表安装sqlite3的头文件路径 而-l表示
可执行程序的名称
经过上面的编译,即可成功。
执行结果如下:
~$ ./hello
数据库连接成功!
插入数据成功
插入数据成功
查询数据库内容
userid = 张三
age = 20
birthday = 2011-7-23
userid = 李四
age = 20
birthday = 2012-9-20
数据库关闭成功!
0 0
- 使用C语言操作Sqlite数据库
- 使用C语言操作Sqlite数据库
- 使用C语言操作Sqlite数据库
- C语言练习03:操作SQLite数据库
- Linux C语言操作SQLite数据库
- C操作SQLite数据库
- C操作SQLite数据库
- C语言操作sqlite数据库(增删改查)
- C语言编程实现对SQlite数据库操作
- iOS sqlite C语言操作
- C语言读写SQLite数据库
- iOS object-c语言使用SQLite数据库增删改查
- 使用C语言操作MySQL数据库
- 使用C语言操作MySQL数据库
- 使用C语言操作Mysql数据库
- 使用C语言操作MySQL数据库
- 使用SQLiteDatabase 操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- Android声音管理AudioManager使用
- Android自定义的SwitchButton按钮,自己喜欢的风格
- APP升级,获取AppStore版本号和本地版本号--Swift
- RxJava响应式函数编程
- LeetCode | Sudoku Solver
- 使用C语言操作Sqlite数据库
- Lucas+阶乘打表+费马小定理模板
- 从网页抓取城市间的距离
- Runtime学习与使用(一):为UITextField添加类目实现被键盘遮住后视图上移
- HDU 2203 循环串匹配
- js判断手机,邮箱格式是否正确
- event.getX()、event.getY()与event.getRawX()、event.getRawY()的区别
- mac安装mongodb
- Accessed None error from node