先看對數據庫進行操作的代碼
#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模式下)】。
待續。。。。
