您的位置:首页 > 编程语言 > C语言/C++

C++增删改查sqlite入门

2014-03-26 11:08 309 查看

http://greatverve.cnblogs.com/archive/2012/09/22/cpp-sqlite-start.html


C++增删改查sqlite入门

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相关工具参考:

http://greatverve.cnblogs.com/archive/2011/04/28/sqlite-start.html

url:http://greatverve.cnblogs.com/archive/2012/09/22/cpp-sqlite-start.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: