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

 

待续。。。。

 

你可能感兴趣的:(sqlite)