sqlite安装与封装后编译
阅读原文时间:2023年07月10日阅读:4

========================安装sqlite=================
官网下载安装包*.tar.gz格式
./configure --prefix=/usr/server/sqlit 安装包目录
make
make install

测试安装成功 sqlite3 test.db

sudo yum install sqlite-devel  (我没安装也成,-devel 继续开发的开发包,有些头文件之类的)

=======================编译====================
编译时 加入参数 -I /usr/server/sqlite/include
-L /usr/server/sqlite/lib
如果编译为静态 则 -static

gcc db.c test.c -o main -I /usr/server/sqlite/include -L /usr/server/sqlite/lib -lsqlite3

=======================源程序=================

网上找的

test.c

/*****************
对sqlite封装函数的测试
名称:test.c
*********************************/
#include
#include "db.h"
int main(int argc, char *argv[])
{
char *dbname="dtmsg.db";
sqlite3 *db;
int iReturn=DbOpenDatabase(dbname,&db);
printf("-0->打开返回值%d<---\n",iReturn); if(iReturn==1) { //新建table t_msg char *sql="create table t_msg(msg,msg_buff)"; printf("-1-->新建sql语句 %s<--\n",sql); int cReturn=DbChangeDataRecord(db,sql); if (cReturn==-1) return 0; printf("-1-->执行新建返回值 %d<--\n",cReturn); //增加、修改、删除 sql="insert into t_msg values ('test','测试信息11')"; //char * sql="update t_msg set msg_buff='测试信息2222222' where msg='test'"; //char * sql="delete from t_msg where msg='test'"; printf("-2-->%s<--\n",sql); int iSqlRet=DbChangeDataRecord(db,sql); printf("-3-->%d<--\n",iSqlRet);

    //查询  
    sql="select \* from t\_msg";  
    char \*\*dbResult;  
    int nRow,nColumn,index;  
    int i,j;  
    int iQret=DbExecuteQuerySql(db,sql,&dbResult,&nRow,&nColumn);  
    if(iQret==1)  
    {  
        index=nColumn;  
        for( i = 0; i < nRow ; i++ )  
        {  
            printf( "第====================> %d 条记录\\n", i+1 );  
            for( j = 0 ; j < nColumn; j++ )  
            {  
                printf( "字段名:%s ==>字段值:%s\\n", dbResult\[j\],dbResult\[index\]?dbResult\[index\]:"" );  
                ++index;  
            }  
        }  
    }  
    //不论数据库查询是否成功,都释放 char\*\* 查询结果,使用 sqlite 提供的功能来释放  
    //sqlite3\_free\_table( dbResult );  
    DbFreeResources(dbResult);  
}  
DbCloseDatabase(db);  
return 1;  

}

db.c

/*************************************************
File name: db.c
Description: C语言查询sqlite3数据库的基本操作封装
Others: 需要sqlite3的动态库 gcc -o db db.c -lsqlite3
*************************************************/
#include "db.h"

/*************************************************
Function: DbOpenDatabase
Description: 打开sqlite3数据库
Input: strDbName:数据库名称;hDbCon:sqlite3的句柄
Output: 无
Return: 1,数据库打开成功;0,数据库打开失败
Others: 无
*************************************************/
int DbOpenDatabase(char *strDbName, sqlite3 **hDbCon)
{
int iRet = sqlite3_open(strDbName,hDbCon); //打开数据库
if(iRet != SQLITE_OK)
{
return 0;
}
else
{
return 1;
}
}
/*************************************************
Function: DbCloseDatabase
Description: 关闭sqlite3数据库
Input: hDbCon:sqlite3的句柄
Output: 无
Return: 无
Others: 无
*************************************************/
void DbCloseDatabase(sqlite3 *hDbCon)
{
sqlite3_close(hDbCon);
}
/*************************************************
Function: DbChangeDataRecord
Description: 向数据库进行插入、修改、删除操作
Input: hDbCon:sqlite3的句柄; strSql:sql语句;
Output: 无
Return: -1,插入(或修改或删除)失败;
大于-1,执行sql后,返回响应的行数
Others: 无
*************************************************/
int DbChangeDataRecord(sqlite3 *hDbCon,char *strSql)
{
char *pErrMsg = 0; //错误信息
int iRet = sqlite3_exec(hDbCon, strSql, NULL, NULL, &pErrMsg);
if(iRet != SQLITE_OK)
{
printf("查询失败,错误码==>:%d,错误原因==>:%s\n", iRet, pErrMsg);
return -1;
}
else
{
return iRet;
}
}

/*************************************************
Function: DbExecuteQuerySql
Description: 查询数据库中的记录集
Input: hDbCon:sqlite3的句柄;strSql:sql语句;
Output: strResult:结果集;iRow:行;iColumn:列;
Return: 1,查询成功;0,查询失败
Others: 无
*************************************************/
int DbExecuteQuerySql(sqlite3 *hDbCon,
char *strSql,
char ***strResult,
int *iRow,
int *iColumn)
{
char *pErrMsg = NULL; //错误日志
int iReturn = 0;
int iResult = sqlite3_get_table( hDbCon,strSql, strResult, iRow, iColumn, &pErrMsg );
if( SQLITE_OK == iResult )
{
iReturn = 1;
}
else
{
iReturn = 0;
}
return iReturn;
}
/*************************************************
Function: DbFreeResources
Description: 不论数据库查询是否成功,都释放 char**
查询结果,使用 sqlite 提供的功能来释放
Input: strResult:结果集
Output: 无
Return: 无
Others: 无
*************************************************/
void DbFreeResources(char **strResult)
{
sqlite3_free_table( strResult );
}

db.h

/*************************************************
File name: db.h
Description: C语言查询sqlite3数据库的基本操作封装
Others: 无
*************************************************/

#ifndef DB_H
#define DB_H

#include
#include
#include
#include

/*************************************************
Function: DbOpenDatabase
Description: 打开sqlite3数据库
Input: strDbName:数据库名称;hDbCon:sqlite3的句柄
Output: 无
Return: 1,数据库打开成功;0,数据库打开失败
Others: 无
*************************************************/
int DbOpenDatabase(char *strDbName, sqlite3 **hDbCon);

/*************************************************
Function: DbCloseDatabase
Description: 关闭sqlite3数据库
Input: hDbCon:sqlite3的句柄
Output: 无
Return: 无
Others: 无
*************************************************/
void DbCloseDatabase(sqlite3 *hDbCon);

/*************************************************
Function: DbChangeDataRecord
Description: 向数据库进行插入、修改、删除操作
Input: hDbCon:sqlite3的句柄; strSql:sql语句;
Output: 无
Return: -1,插入(或修改或删除)失败;
大于-1,执行sql后,返回响应的行数
Others: 无
*************************************************/
int DbChangeDataRecord(sqlite3 *hDbCon,char *strSql);

/*************************************************
Function: DbExecuteQuerySql
Description: 查询数据库中的记录集
Input: hDbCon:sqlite3的句柄;strSql:sql语句;
Output: strResult:结果集;iRow:行;iColumn:列;
Return: 1,查询成功;0,查询失败
Others: 无
*************************************************/
int DbExecuteQuerySql(sqlite3 *hDbCon,
char *strSql,
char ***strResult,
int *iRow,
int *iColumn);

/*************************************************
Function: DbFreeResources
Description: 不论数据库查询是否成功,都释放 char**
查询结果,使用 sqlite 提供的功能来释放
Input: strResult:结果集
Output: 无
Return: 无
Others: 无
*************************************************/
void DbFreeResources(char **strResult);

#endif

/* Others: 需要sqlite3的动态库 gcc -o db db.c ./libsqlite3.so //还没弄懂
或 gcc -o db db.c -lsqlite3 //还没弄懂
*************************************************/
#include
#include
#include
#include

int DbOpenDatabase(char *strDbName, sqlite3 **hDbCon)
{
int iRet = sqlite3_open(strDbName,hDbCon); //打开数据库
if(iRet != SQLITE_OK)
{
return 0;
}
else
{
return 1;
}
}

void DbCloseDatabase(sqlite3 *hDbCon)
{
sqlite3_close(hDbCon);
}

int DbChangeDataRecord(sqlite3 *hDbCon,char *strSql)
{
char *pErrMsg = 0; //错误信息
int iRet = sqlite3_exec(hDbCon, strSql, NULL, NULL, &pErrMsg);
if(iRet != SQLITE_OK)
{
//printf("查询失败,错误码==>:%d,错误原因==>:%s\n", ret, errmsg );
return -1;
}
else
{
return iRet;
}
}

int DbExecuteQuerySql(sqlite3 *hDbCon,
char *strSql,
char ***strResult,
int *iRow,
int *iColumn)
{
char *pErrMsg = NULL; //错误日志
int iReturn = 0;
int iResult = sqlite3_get_table( hDbCon,strSql, strResult, iRow, iColumn, &pErrMsg );
if( SQLITE_OK == iResult )
{
iReturn = 1;
}
else
{
iReturn = 0;
}
return iReturn;
}

void DbFreeResources(char **strResult)
{
sqlite3_free_table( strResult );
}

int DbSqliteCallBack(sqlite3 * hDbCon,const char *strSql,int (*QueryResultBack)())
{
char *pErrMsg;
int iRetDb = 0;
iRetDb = sqlite3_exec(hDbCon,strSql,QueryResultBack,NULL,&pErrMsg);
if(iRetDb != SQLITE_OK)
{
return 0;
}
return 1;
}

//回调函数例子测试
/*static int QueryResultBack(void *para,int iColumn,char **cValue,char **cColumnValueName)
{
int iCn;
for(iCn = 0; iCn < iColumn; iCn++)
{
//printf( "%s = %s\n" , cColumnValueName[i], cValue[i] ? cValue[i] : "NULL" );
printf( "%s = %s\n" , cColumnValueName[i], cValue[i]);
}
return 0;
}*/

int main(int argc, char *argv[])
{
char *dbname="dtmsg.db";
sqlite3 *db;
int iReturn=DbOpenDatabase(dbname,&db);
printf("-1->%d<---\n",iReturn); if(iReturn==1) { //增加、修改、删除 char *sql="insert into t_msg (msg,msg_buff) values ('test','测试信息11')"; //char * sql="update t_msg set msg_buff='测试信息2222222' where msg='test'"; //char * sql="delete from t_msg where msg='test'"; printf("-2-->%s<--\n",sql); int iSqlRet=DbChangeDataRecord(db,sql); printf("-3-->%d<--\n",iSqlRet);

    //查询  
    //char \*sql="select \* from t\_msg";  
    sql="select \* from t\_msg";  
    char \*\*dbResult;  
    int nRow,nColumn,index;  
    int i,j;  
    int iQret=DbExecuteQuerySql(db,sql,&dbResult,&nRow,&nColumn);  
    if(iQret==1)  
    {  
        index=nColumn;  
        for( i = 0; i < nRow ; i++ )  
        {  
            printf( "第====================> %d 条记录\\n", i+1 );  
            for( j = 0 ; j < nColumn; j++ )  
            {  
                printf( "字段名:%s ==>字段值:%s\\n", dbResult\[j\],dbResult\[index\]?dbResult\[index\]:"" );  
                ++index;  
            }  
        }  
    }  
    //不论数据库查询是否成功,都释放 char\*\* 查询结果,使用 sqlite 提供的功能来释放  
    //FreeResources(dbResult);  
    sqlite3\_free\_table( dbResult );  
}  
DbCloseDatabase(db);  
return 1;  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器