vs2010中实现sqlite数据库的增删改查_sqlite

文章目录

一、下载所需安装包

官网地址:​​http://www.sqlite.org/download.html​​​ 下载 sqlite-dll-win32-x86-3080803.zip,解压缩后里面有两个文件:sqlite3.dll和sqlite3.def。
下载 sqlite-amalgamation-3080803.zip,解压缩后里面有4个文件:sqlite3.h、sqlite3ext.h、shell.c、sqlite3.c。
下载 sqlite-shell-win32-x86-3080803.zip,解压缩后里面有1个文件:sqlite3.exe(这个文件可能是做测试用的,没有用到,后期可以生成)。

二、生成sqlite3.lib文件并添加到vs中

  1. 将sqlite-dll-win32-x86-3080803.zip解压到c盘(别的盘也可以,后期一些路径需要注意)
  2. 打开vs2010创建一个win32项目(打开VS2010,文件–>新建–>项目–>Visual C+±->Win32–>Win32项目,项目名称输入SQLite,点击下一步,应用程序选择“静态库”,附件选项中取消选中“预编译头”,点击"完成")

  3. 启动Microsoft Visual Studio 2010 -->Visual Studio Tools -->Visual Studio 命令提示(2010)(如下图)
  4. vs2010中实现sqlite数据库的增删改查_数据库_02


  1. 使用命令 LIB /out:c:/sqlite3.lib /MACHINE:IX86 /DEF:c:/sqlite3.def (注意路径,此时需要将sqlite3.def拷贝到C盘跟目录下,生成的文件也在C盘根目录下,如下图)
  2. vs2010中实现sqlite数据库的增删改查_sqlite_03


  3. 将sqlite3.h,shell.c文件复制到这个工程目录下,然后在项目中将这两个文件添加进来(如下图(cpp文件为自己创建,用来下方做测试))
  4. vs2010中实现sqlite数据库的增删改查_sqlite_04

  5. sqlite3.lib复制到工程文件夹下。
  6. 工程属性中添加sqlite3.lib库依赖
    (Configuration Properties->Linker->Input->Additional Dependencies添加sqlite3.lib)或
    (项目->属性->配置属性->链接器->输入->附加依赖项添加sqlite3.lib)
  7. 编译运行,会出现数据类型转换的一些警告,不用管它,然后在Release目录下就会生成一个sqlite3.exe文件。

三、创建数据库

  1. 在CMD下进入到项目目录下Release目录下的sqlite.exe文件(有的可能是sqlite3.exe,看具体文件)
  2. 在CMD命令提示符下输入sqlite test.db(test.db是数据库名)回车,执行完后,命令提示符自动跳转到"SQLITE>"状态。
    注意:这时test.db数据库确实已经创建好了但是还是个临时的,所以现在还是看不到这个数据库!
  3. 创建数据库表并添加属性
sqlite> create table user
> (
> id integer primary key autoincrement,
> name varchar(64),
> age integer
> );
sqlite> .quit

四、测试样例:

实现sqlite数据库的增删改查

#include "sqlite3.h"

#include <iostream>
using namespace std;

sqlite3 *pDB = NULL;

//删除表内数据
bool DeleteTable();
//重新设置表内数据自增id
bool Setsequence();
//向创建的user表内插入数据
bool AddUser(const string& sName, const string& sAge);
//删除表内的某一角色
bool DeleteUser(const string& sName);
//修改某一角色的某一属性
bool ModifyUser(const string& sName, const string& sAge);
//查询user表中所有角色的所有信息
bool SelectUser();
//查询user表中特定角色的信息
bool push_clicked();

int main()
{
//打开sqlite数据库(按照自己创建的数据库位置打开)
int nRes = sqlite3.open("D:\\example\\SQLite\\Debug\\test.db",&pDB);
if(nRes != SQLITE_OK)
{
cout<<"Open database fail: "<<sqlite3_errmsg(pDB);
goto QUIT;
}

DeleteTable();
Setsequence();

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;
}

push_clicked();
QUIT:
sqlite3_close(pDB);
system("pause");
return 0;
}

bool DeleteTable()
{
string strSql = "delete from user";
char *cErrMsg;
int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg);
if(nRes != SQLITE_OK)
{
cout<<"Delete user fail!"<<endl;
return false;
}

cout<<"Delete user success!"<<endl;
return true;
}

bool Setsequence();
{
string strSql = "update sqlite_sequence set seq = 0 where name = 'user'";
char *cErrMsg;
int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg);
if(nRes != SQLITE_OK)
{
cout<<"Set user fail!"<<endl;
return false;
}

cout<<"Set user success!"<<endl;
return true;
}

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!"<<endl;
return false;
}

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!"<<endl;
return false;
}

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 = '"; //where前的空格不能删除
strSql += sName;
strSql += "'";

char *cErrMsg;
int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg);
if(nRes != SQLITE_OK)
{
cout<<"modify user fail!"<<endl;
return false;
}

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[i]<<" = "<<(argv[i] ? argv[i] : "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 user fail!"<<endl;
return false;
}

return true;
}

bool push_clicked()
{
char *cErrMsg;
int res = sqlite3_exec(pDB , "select name from user where age = 21", UserResult, 0, &cErrMsg);
if(res != SQLITE_OK)
{
cout<<"find user fail!"<<endl;
return false;
}

return true;
}

结果如下图:

vs2010中实现sqlite数据库的增删改查_sql_05