zoukankan      html  css  js  c++  java
  • 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模式下)】。

    待续。。。。

    天行健君子以自强不息。
  • 相关阅读:
    OnMeasureItem和OnDrawItem的区别和联系
    DockPanel 类
    C# 源码 AForge.NET
    ystem.Windows.Forms.SplitContainer : ContainerControl, ISupportInitialize
    System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....
    System.ComponentModel.Component : MarshalByRefObject, IComponent, IDisposable
    System.Windows.Forms.ListView : Control
    vs2013 密钥_
    系统封装 EasyBoot如何将WIN7安装版提取到光盘
    系统封装 ES3使用方法
  • 原文地址:https://www.cnblogs.com/mrye/p/2813897.html
Copyright © 2011-2022 走看看