博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++增删改查sqlite入门
阅读量:6256 次
发布时间:2019-06-22

本文共 3672 字,大约阅读时间需要 12 分钟。

sqlite小巧好用,功能强大。

C++操作sqlite需要
sqlite3.h,sqlite3.dll,sqlite3.lib

下载
sqlite-dll-win32-x86-3071400.zip
sqlite-amalgamation-3071400.zip

前者可以得到sqlite3.dll和sqlite3.def后者可以得到源码sqlite3.h

后面说明如何编译sqlite3.def生成sqlite3.lib

#include <sqlite3.h>
#include <iostream>
#include <
string>
using 
namespace std;
bool createTable();
//
创建表
bool insert();
bool Delete();
bool update();
bool 
select();
int print_result_cb(
void* data,
int n_columns,
char** column_values,
char** column_names);
void print_row(
int n_values, 
char** values);
sqlite3 *pDB = NULL;
char * errMsg = NULL;
int rc = 
0;
int main()
{
    
string strConn = 
"
D:/cpp/database/sqlite/test.db
";
    
//
打开一个数据库,如果改数据库不存在,则创建一个名字为databaseName的数据库文件
    rc = sqlite3_open(strConn.c_str(), &pDB);
    
if(rc)
    {
        cout<<
"
打开数据库 
"<<strConn<<
"
 失败
"<< endl;
        
return 
0;
    }
    
try
    {
        
//
createTable();
        
//
insert();
        
//
Delete();
        
//
update();
        
select();
        sqlite3_close(pDB);  
    }
    
catch(exception &ex)
    {
        cout<<
"
error:
"<<ex.what()<<endl;
    }
    
catch(...)
    {}
    
return 
1;
}
bool createTable()
{
    
//
插入一个表,返回值为SQLITE_OK为成功,否则输出出错信息
    
//
函数参数:第一个为操作数据库的指针,第二句为SQL命令字符串
    
//
第三个参数为callback函数,这里没有用,第四个参数为callback函数
    
//
中的第一个参数,第五个为出错信息
    
int rc = sqlite3_exec(pDB, 
"
create table tblTest(id int, name QString)
"
0
0, &errMsg);
    
if(rc == SQLITE_OK)
       cout<< 
"
创建表 tblTest 成功!
" << endl;
    
else
       cout<<
"
建表失败:
"<<errMsg<< endl;
    
return 
true;
}
bool insert()
{
    
//
往表中添加数据
    
int id = 
1;
    
char name[] = 
"
大气象
";
    
char value[
500];
    
//
定义一条参数SQL命令,其中chn,eng为需要插入的数据    
    sprintf(value, 
"
insert into tblTest(id, name)values(%d, '%s')
", id, name);
    rc = sqlite3_exec(pDB,value,
0,
0,&errMsg);
    
return 
1;
}
bool Delete()
{
    sqlite3_exec(pDB,
"
delete from tblTest where id = 100
",
0,
0,&errMsg);
    
return 
1;
}
bool update()
{
    
char *pSql = 
"
update tblTest set name = ? where id = ?
";
    sqlite3_stmt *ppStmt;
    
if(SQLITE_OK != sqlite3_prepare_v2(pDB,pSql,strlen(pSql),&ppStmt,
0))
    {
        cout<<
"
update tblTest : prepare sql error !!!
"<<endl;
        sqlite3_finalize(ppStmt);
        
return 
0;
    }
    sqlite3_bind_text(ppStmt,
1,
"
ok
",-
1,SQLITE_TRANSIENT);    
//
绑定值到第一个?
    sqlite3_bind_int(ppStmt,
2,
100);                            
//
绑定值到第二个?
    
int ret = -
1 ;
    
while(ret != SQLITE_DONE)
    {
        ret = sqlite3_step(ppStmt);
    }
    sqlite3_reset(ppStmt);
    sqlite3_finalize(ppStmt);
    
return 
1;
}
bool 
select()
{
    
//
查询一条记录
    
char value[
500];
    
//
定义一条查询语句,其中条件为当english为target时的中文记录
    
//
print_result_cb为callback函数,在其中可以得到查询的结果,具体见下文
    
//
sprintf(value,"select * from tblTest where name='%s'", "大气象");
    sprintf(value,
"
select * from tblTest
"
"
hello
");
    rc = sqlite3_exec(pDB,value,print_result_cb, 
0, &errMsg);
    
if(rc == SQLITE_OK)
    {
        cout<<
"
select the record successful!
"<<endl;
    }
    
else
    {
        cout<<errMsg<<endl;        
    }           
    
return 
1;
}
//
callback回调函数print_result_cb的编写,其中data为sqlite3_exec中的第四个参数
//
第二个参数是栏的数目,第三个是栏的名字,第四个为查询得到的值得。
//
这两个函数输出所有查询到的结果
//
有多少列回调函数就会执行多少次。
int print_result_cb(
void* data,
int n_columns,
char** column_values,
char** column_names)
{
    
static 
int column_names_printed = 
0;
    
int i; 
    
if (!column_names_printed) 
//
首次执行结果是列名
    {
        print_row(n_columns, column_names);
        column_names_printed = 
1;
    }
    print_row(n_columns, column_values);
    
return 
0;
}
void print_row(
int n_values,
char** values)
{
    
int i;
    
for (i = 
0; i < n_values; ++i) 
    {
        
if (i > 
0
        {
            printf(
"
\t
");
        }
        printf(
"
%s
", values[i]); 
    }
    printf(
"
\n
");
}

运行时把sqlite3.dll复制到运行目录下。


编译sqlite3.def生成sqlite3.lib

设置环境变量:

PATH:D:\Program Files\vs08\VC\bin 

(我的vc2008安装路径:D:\Program Files\vs08)

进入你的sqlite3.def目录执行:LIB /DEF:sqlite3.def /machine:IX86


如果提示:
没有找到 mspdb80.dll

到D:\Program Files\vs08\Common7\IDE目录下

复制msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe

到D:\Program Files\vs08\VC\bin 

sqlite相关工具参考:

 

url:

    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/greatverve/archive/2012/09/22/cpp-sqlite-start.html,如需转载请自行联系原作者

你可能感兴趣的文章
计算二叉树总结点/叶结点个数
查看>>
sizeof 和strlen的区别
查看>>
第十章 Scala 容器(三):使用可变与不可变容器特有方法
查看>>
XCode 7上传遇到ERROR ITMS-90535 Unexpected
查看>>
工厂模式
查看>>
pycharm激活码永久有效2019年5月28日
查看>>
VUE(1)
查看>>
QBlog博客 V2.5 版本发布 增加健康频道[支持多语言、多用户、多数据库、目录级URL]...
查看>>
基于MIC平台的向量加示例
查看>>
搜索引擎 & sniff
查看>>
linux 编程使用管道来控制 shell
查看>>
免费客户关系管理软件SinoCRM公益版正式发布
查看>>
Python与C++引用分析
查看>>
React组件间的传值
查看>>
Spring扫描自定义注解的实现
查看>>
交互设计的 UI 原则
查看>>
100行PHP代码实现socks5代理服务器
查看>>
js框架
查看>>
Android开发、测试持续集成环境Jenkins搭建
查看>>
BPM 是与非 -- 什么是BPM,如何辨别是否BPM产品,以及如何选择BPM产品
查看>>