软件可以到官网下载: http://www.sqlite.org/download.html
我安装的版本是:sqlite-autoconf-3071502.tar.gz
解压:tar -xvf sqlite-autoconf-3071502.tar.gz
进入目录:cd sqlite-autoconf-3071502
新建一个安装目录:mkdri my_install
执行:./configure --prefix=安装目录
会自动生成Makefile文件
编译并安装:make && make install
如果这时候使用:gcc sqlitest.c -o sqlitest
会出现错误:
sqlitest.c:3:25: fatal error: sqlite3.h: No such file or directory
解决办法:
将头文件复制到系统的include中:
cp 安装目录/include/sqlite3.h /usr/include
这时候再测试一下:gcc sqlitest.c -o sqlitest
会出现错误:
/tmp/ccSaqYiI.o: In function `main':
sqlitest.c:(.text+0x39): undefined reference to `sqlite3_open'
sqlitest.c:(.text+0x50): undefined reference to `sqlite3_errmsg'
sqlitest.c:(.text+0xad): undefined reference to `sqlite3_exec'
sqlitest.c:(.text+0xde): undefined reference to `sqlite3_free'
sqlitest.c:(.text+0x10a): undefined reference to `sqlite3_exec'
sqlitest.c:(.text+0x14d): undefined reference to `sqlite3_exec'
sqlitest.c:(.text+0x19c): undefined reference to `sqlite3_exec'
sqlitest.c:(.text+0x1a8): undefined reference to `sqlite3_close'
这是因为没有库文件
解决办法:
cp /安装目录/lib/libsqlite3.so /usr/lib
libsqlite3.so是链接文件,一般会自动把libsqlite3.so.8和libsqlite3.so.8.0.6一起复制过去,如果没有的话就手动复制吧。
编译时,使用:
gcc sqlitest.c -o sqlitest -l sqlite3
测试代码:
#include
#include
//查询的回调函数声明
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('zhangsan',20,'2011-7-23');", 0, 0, &pErrMsg);
if(result == SQLITE_OK){
printf("插入成功!\n");
}
result = sqlite3_exec( db, "insert into users values('lisi',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;
}