linux下sqlite3的安装、sql语句学习、c代码编程

第一章:linux下安装sqlite3

第一步:编译源码得到相应的库和可执行的sqlite3和头文件

1、下载源码:http://www.sqlite.org/download.html, 诸如:sqlite-autoconf-3080500.tar.gz

2、解压相应的下载的压缩包,并编译

      tar zxvf sqlite-autoconf-3080500.tar.gz -C /home/

     解压后的在/home下得到的目录是 sqlite-autoconf-3080500

     为了区分源码和编译后的文件,我们再在/home下创建一个编译后文件的存放目录

    # cd /home

    #mkdir sqlite_compile_receive

    #cd sqlite_compile_receive

   //作相关配置  

   #../sqlite-autoconf-3080500/configure --prefix=/home/sqlite_compile_receive

   #make && make install

 编译后成功后在/home/sqlite_compile_receive下便可得:

  lib文件夹 和bin 文件夹 和include文件夹

备注:如果编译出现其他问题,请查阅其他资料(我编译这里的时候没有出错)


第二步:将/home/sqlite_compile_receive下的到的/lib下的库,以及bin下的可执行文件,以及include下的头文件防盗系统的中去(为了我们c编程的时候头文件能够找到)

#sudo cp -R  /home/sqlite_compile_receive/lib/    /usr/lib/

#sudo cp /home/sqlite_compile_receive/include/sqlite3.h  /usr/include/

#sudo cp /home/sqlite_compile_receive/bin   /bin


第二章:基本sql语句学习

对于sqlite的相关语法的学些这里有一个好一点网站:http://www.w3cschool.cc/sqlite/sqlite-where-clause.html


第三章:c代码实现对数据库的操作

函数一:int sqlite3_open(const char *db_path, sqlite3 **db);

参数一:需要打开的数据库(这里是以字符串的形式)

参数二:关联打开的数据库:将该数据库的内容同db关联起来(我们直接操作db就等于操作打开的数据库了)


函数二:sqlite3_close(sqlite3 *db);

参数:sqlite3_open()打开的数据库链接


函数三:int sqlite3_exec(  

  sqlite3* ppDb,                             /* An open database */  

   const char *sql,                           /* SQL to be evaluated */  

   int (*callback)(void*,int,char**,char**),  /* Callback function */      

   void *,                                    /* 1st argument to callback */  

   char **errmsg                              /* Error msg written here */  

); 

第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。 第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。

备注:通常没有什么特殊需求,第三个和第四个参数置为0;


返回值:sqlite3_exec()返回值是指执行sql语句是否成功(0成功,非0失败),而不是执行sql的结果;

函数四:sqlite3_get_table(sqlite3*db,const char* sql,char*** resultp,int* nrow,int* ncolumn,char** errmsg);

参数一:需要操作的数据库

参数二:需要执行的sql语句

参数三:执行sql的结果存放的地方(包括字段名也存放载这里)

参数四:执行结果的行数

参数五:执行结果的列数

参数六:错误信息存放

返回值:执行sql语句是否成功信息(0成功,非0失败)


函数五:sqlite3_free_table(char**resultp)

参数:释放sqlite3_get_table()得到的resultp空间


代码实例一:

#include <stdio.h>
#include <sqlite3.h>
int main(void)
{
    sqlite3 *db = NULL;
    char *hErrMsg = 0;
    int rc;

    rc = sqlite3_open("/home/hyg/sql_hyg/hyg.db",&db);
    printf("rc is: %d\n",rc);
    if ( rc )
    {
        fprintf(stderr,"can't open database:%s\n",sqlite3_errmsg(db));
        sqlite3_close(db);
        return 0;
    }

    printf("opend successful!!!\n");
    char *sql = "CREATE TABLE test1(ID INTEGER PRIMARY KEY,SEX VARCHAR(2));";
    printf("sqlite_exec(slq) is %d\n", sqlite3_exec(db, sql, 0, 0, &hErrMsg));
    /*sqlite3_exec();返回值的结果为,执行的sql语句是否成功,成功返回0,否则非0
     *注意:是执行sql是否成功,而不是执行sql语句的结果
    */
    char *sql1 = "select count(*) from test1;";
    printf("sqlite_exec(slq) is %d\n", sqlite3_exec(db, sql1, 0, 0, &hErrMsg));

    sqlite3_close(db);
    return 0;
}

代码实例二:

/*遍历条件查询,然后得到需要的结果可以根据此段代码修改*/

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int main(void)
{
    sqlite3 *db = NULL;
    char *hErrMsg = 0;
    char **dbResult;
    int nRow=0,Column=0;
    int rc;

    rc = sqlite3_open("/home/hyg/sql_hyg/hyg.db",&db);
    printf("rc is: %d\n",rc);
    if ( rc )
    {
        fprintf(stderr,"can't open database:%s\n",sqlite3_errmsg(db));
        sqlite3_close(db);
        return 0;
    }

    printf("opened successful!!!\n");
    char sql1[128] ;

    snprintf(sql1, 128, "select * from test1 WHERE SEX='%s';", "男");
    int re_get=0, index=0;
    re_get = sqlite3_get_table(db, sql1, &dbResult, &nRow, &Column, &hErrMsg);
    if (SQLITE_OK == re_get)
    {
        int i, j;
        index = Column;
        printf("%-5s%-5s\n", dbResult[0], dbResult[1]);
        for (i=0; i<nRow; i++)
        {
            for (j=0; j<Column; j++)
            {
                printf("%-5s", dbResult[index++]);
            }
            printf("\n");
        }
    }

    sqlite3_free_table(dbResult);
    sqlite3_close(db);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值