linux下GCC 編譯sqlite 調用sqliteAPI編寫程序


先看對數據庫進行操作的代碼

#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模式下)】。

 

待續。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM