先看对数据库进行操作的代码
#include <stdio.h> #include <stdlib.h> #include "sqlite3.h" int showTableInfo ( void *para,int n_column,char **column_value,char **column_name ); int showCount ( void *para,int n_column,char **column_value,char **column_name ); int main ( int argc, char **argv ) { sqlite3 *db=NULL; char *errMsg; int rc; //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 rc = sqlite3_open ( "zieckey.db", &db ); printf ( sqlite3_version ); if ( rc ==SQLITE_OK ) { //如果打开成功 printf ( "打开数据库成功!" ); rc = sqlite3_exec ( db,"create table if not exists user(ID integer,name varchar(32))",NULL,NULL,&errMsg ); if ( rc != SQLITE_OK ) { printf ( "创建表失败,错误码:%d,错误原因:%sn",rc,errMsg ); printf ( "创建表user失败!" ); } rc=sqlite3_exec ( db,"insert into user values('123','测试')",NULL,NULL,&errMsg ); if ( rc != SQLITE_OK ) { printf ( "插入数据失败!" ); } rc=sqlite3_exec ( db,"select * from user",showTableInfo,NULL,&errMsg ); rc=sqlite3_exec ( db,"select count(*) from user",showCount,NULL,&errMsg ); if ( rc != SQLITE_OK ) { printf ( "查询失败!" ); } } return 0; } int showTableInfo ( void *para,int n_column,char **column_value,char **column_name ) { int i; printf ( "记录包含%d个字段\n",n_column ); for ( i=0; i<n_column; i++ ) { printf ( "字段名:%s >> 字段值:%s\n",column_name[i],column_value[i] ); } printf ( "--------------------------------------\n" ); return 0; } int showCount ( void *para,int n_column,char **column_value,char **column_name ) { printf ( "一共%s条记录%s\n",column_value[0],column_name[0] ); return 0; }
同时在你的目录下放置 sqlite的头文件(.h)和实现文件(.c)
使用命令
gcc sqlite3.c main.cpp -lpthread -ldl
执行后生成 a.out
运行./a.out 输出
open zieckey.db successfully!
并且目录下创建了一个zieckey.db
此时sqlite初体验结束
kdevelop4 如何添加编译参数来使用sqlite
如何用cmkae 编译libsqlite3.so
project(test10)
#添加需要编译的文件,制定编译方式为shared
add_library(sqlite3 SHARED shell.c sqlite3.c)
SHARED 如果不加这个SHARED参数,会制定为(编译)静态链接库
我们看下最后执行的链接命令
/usr/bin/gcc -fPIC -g -shared -Wl,-soname,libsqlite3.so -o libsqlite3.so CMakeFiles/sqlite3.dir/shell.c.o CMakeFiles/sqlite3.dir/sqlite3.c.o
再看下静态链接库的链接命令
/usr/bin/ar cr libsqlite3.a CMakeFiles/sqlite3.dir/shell.c.o CMakeFiles/sqlite3.dir/sqlite3.c.o
/usr/bin/ranlib libsqlite3.a
使用动态链接库
我吧链接库放在工程目录下。所以他做cmake钟的路径就可以写
${PROJECT_SOURCE_DIR}/libsqlite3.so
看完整cmake文件
project(test6) #-- 源码目录:/home/leaves/projects/test6 #-- 编译目录:/home/leaves/projects/test6/build MESSAGE(STATUS "源码目录:" ${PROJECT_SOURCE_DIR}) MESSAGE(STATUS "编译目录:" ${PROJECT_BINARY_DIR}) #设置变量,存放源代码列表 set(test6_SRC main.c) #添加可执行文件编译源代码 add_executable(test6 ${test6_SRC}) #添加动态链接库,${PROJECT_SOURCE_DIR}/libsqlite3.so是这个工程附带的链接库 target_link_libraries(test6 ${PROJECT_SOURCE_DIR}/libsqlite3.so dl pthread )
如果想换成静态链接,只要给${PROJECT_SOURCE_DIR}/libsqlite3.so换成${PROJECT_SOURCE_DIR}/libsqlite3.a即可。
当然你一定要知道一件事,就所静态链接比动态链接编译的可执行程序要大【这里我的程序所1.2M和8K的区别(debug模式下)】。
待续。。。。