使用C语言操作Sqlite数据库
2013-03-09 08:46
381 查看
原文地址:http://blog.chinaunix.net/uid-20680669-id-3124348.html
在工作中,我总是使用编译后sqlite3可执行程序,进行数据库的创建;其实我们操作sqlite数据库,
也可是使用源代码级别的形式去操作数据库。我在网上查找,对部分代码进行修改,添加上注释,
形式如下代码,其中包含对数据表的创建,添加数据,查询数据功能,代码如下:
#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
数据库关闭成功!
sqlitetest.rar
在工作中,我总是使用编译后sqlite3可执行程序,进行数据库的创建;其实我们操作sqlite数据库,
也可是使用源代码级别的形式去操作数据库。我在网上查找,对部分代码进行修改,添加上注释,
形式如下代码,其中包含对数据表的创建,添加数据,查询数据功能,代码如下:
#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
数据库关闭成功!
sqlitetest.rar
相关文章推荐
- 使用C语言操作Sqlite数据库
- 使用C语言操作Sqlite数据库
- C语言中操作进程信号的相关函数使用详解
- linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql
- C语言编程实现对SQlite数据库操作
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- android 使用 SQLiteOpenHelper 实现对SQLite数据库操作
- 在安卓开发中使用SQLite数据库操作实例
- OTL使用ODBC操作SQLite数据库
- iOS object-c语言使用SQLite数据库增删改查
- 使用SQLiteDatabase操作SQLite数据库
- 【Linux】嵌入式开发,在Linux中使用C语言对Fork函数执行子函数及父函数,命令ps 及 ls 操作
- 使用事务操作SQLite数据库
- 使用SQLiteDatabase 操作SQLite数据库
- [C语言]栈的基本操作 使用两个栈模拟队列
- 使用4行代码操作Sqlite数据库android
- C语言getchar()=='\n'的使用,对输入的任意个字符操作
- Android Sqlite数据库查询操作使用 '%?%' 的问题
- 使用SQLite数据库的操作
- 【转】Android使用事务操作SQLite数据库【学习记录】