设为首页 收藏本站
查看: 818|回复: 0

[经验分享] C++使用SQLite步骤及示例

[复制链接]

尚未签到

发表于 2016-11-29 11:19:07 | 显示全部楼层 |阅读模式
C++使用SQLite步骤及示例

开发环境:Windows XP+VS2005。
  开发语言:C++。



1、 下载sqlite文件。

下载网址:http://www.sqlite.org/download.html。


SQLite版本为SQLite 3.7.13,相关文件如下。

sqlite-dll-win32-x86-3071300.zip:包含sqlite3.def、sqlite3.dll文件。

sqlite-amalgamation-3071300.zip:包含sqlite3.h 文件。

sqlite-shell-win32-x86-3071300.zip:包含sqlite3.exe 文件。


2、 生成sqlite3.lib。

 sqlite-dll-win32-x86-3071300.zip文件解压到D:\ sqlite。

 运行Visual Studio 2005 Command Prompt命令行程序。

启动位置:开始程序->Microsoft Visual Studio 2005->Visual Studio Tools->Visual Studio 2005 Command Prompt。

 依次执行控制台命令。
cd D:\sqlite\sqlite-dll-win32-x86-3071300
D:
lib /def:sqlite3.def /machine:ix86
  即可生成sqlite3.lib文件。




3、 创建测试数据。

 sqlite-shell-win32-x86-3071300.zip文件解压到D:\ sqlite。

 启动命令行,进入D:\ sqlite目录。

命令依次为:
cd D:\sqlite
d: 创建test.db测试文件。

创建user表。

字段Code字段类型字段描述
idinteger主键,自增
namevarchar(64)用户名
ageinteger年龄

创建命令依次如下。
D:\sqlite>sqlite3.exe test.db
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table user
...> (
...> id integer primary key autoincrement,
...> name varchar(64),
...> age integer
...> );
sqlite> .quit


4、 创建示例工程

 创建win32控制台工程SQLiteTest。

 sqlite3.h(在sqlite-amalgamation-3071300.zip压缩包中)添加到工程。

 sqlite3.lib复制到工程文件夹下。

 工程属性中添加sqlite3.lib库依赖。

Configuration Properties->Linker->Input->Additional Dependencies添加sqlite3.lib。

 程序代码为:
/*
@brief 本程序测试sqlite数据库的增删改查
@date 2012-09-03
*/
// SQLiteTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "sqlite3.h"
#include <iostream>
using namespace std;
sqlite3 * pDB = NULL;
//增加用户
bool AddUser(const string& sName, const string& sAge);
//删除用户
bool DeleteUser(const string& sName);
//修改用户
bool ModifyUser(const string& sName, const string& sAge);
//查找用户
bool SelectUser();
int _tmain(int argc, _TCHAR* argv[])
{
//打开路径采用utf-8编码
//如果路径中包含中文,需要进行编码转换
int nRes = sqlite3_open("D:\\sqlite\\test.db", &pDB);
if (nRes != SQLITE_OK)
{
cout<<"Open database fail: "<<sqlite3_errmsg(pDB);
goto QUIT;
}
//添加“赵钱孙李”
if (    !AddUser("zhao", "18")
|| !AddUser("qian", "19")
|| !AddUser("sun", "20")
|| !AddUser("li", "21"))
{
goto QUIT;
}
//删除“赵”
if (!DeleteUser("zhao"))
{
goto QUIT;
}
//修改“孙”
if (!ModifyUser("sun", "15"))
{
goto QUIT;
}
//查找用户
if (!SelectUser())
{
goto QUIT;
}
QUIT:
sqlite3_close(pDB);
return 0;
}
bool AddUser(const string& sName, const string& sAge)
{
string strSql = "";
strSql += "insert into user(name,age)";
strSql += "values('";
strSql += sName;
strSql += "',";
strSql += sAge;
strSql += ");";
char* cErrMsg;
int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
if (nRes != SQLITE_OK)  
{
cout<<"add user fail: "<<cErrMsg<<endl;
return false;
}
else
{
cout<<"add user success: "<<sName.c_str()<<"\t"<<sAge.c_str()<<endl;
}
return true;
}
bool DeleteUser(const string& sName)
{
string strSql = "";
strSql += "delete from user where name='";
strSql += sName;
strSql += "';";
char* cErrMsg;
int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
if (nRes != SQLITE_OK)  
{
cout<<"delete user fail: "<<cErrMsg<<endl;
return false;
}
else
{
cout<<"delete user success: "<<sName.c_str()<<endl;
}
return true;
}
bool ModifyUser(const string& sName, const string& sAge)
{
string strSql = "";
strSql += "update user set age =";
strSql += sAge;
strSql += " where name='";
strSql += sName;
strSql += "';";
char* cErrMsg;
int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
if (nRes != SQLITE_OK)  
{
cout<<"modify user fail: "<<cErrMsg<<endl;
return false;
}
else
{
cout<<"modify user success: "<<sName.c_str()<<"\t"<<sAge.c_str()<<endl;
}
return true;
}
static int UserResult(void *NotUsed, int argc, char **argv, char **azColName)
{
for(int i = 0 ; i < argc ; i++)
{
cout<<azColName<<" = "<<(argv ? argv : "NULL")<<", ";
}
cout<<endl;
return 0;
}
bool SelectUser()
{
char* cErrMsg;
int res = sqlite3_exec(pDB, "select * from user;", UserResult , 0 , &cErrMsg);  
if (res != SQLITE_OK)
{
cout<<"select fail: "<<cErrMsg<<endl;
return false;
}
return true;
}


 编译成功后,将sqlite3.dll复制到SQLiteTest.exe同一目录下,运行SQLiteTest.exe。

运行结果:
add user success: zhao  18
add user success: qian  19
add user success: sun   20
add user success: li    21
delete user success: zhao
modify user success: sun        15
id = 2, name = qian, age = 19,
id = 3, name = sun, age = 15,
id = 4, name = li, age = 21,
5、 SQLite管理工具
  可视化管理工具,推荐使用:SQLite Expert,见:http://www.sqliteexpert.com/。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307186-1-1.html 上篇帖子: SQLite数据库优缺点分析 下篇帖子: Android中SQLite的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表