SQLite之增删改查(C++详解)

前端之家收集整理的这篇文章主要介绍了SQLite之增删改查(C++详解)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

开始我们的sqlite之旅吧!其实原来对sqlite一无所知,毫不夸张的可以说是听都没听过吧,一次偶然的机会我发现了这个数据库,但是发现网上资料不是很多然后慢慢研究它,最后总结出一些小知识吧,拿出来和大家分享分享,供大家参考。。。如有错误,请各位大虾多多指正!

开发所需依赖

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

在该页面上下载Source Code中的sqlite-amalgamation-3071300.zip,该包有含有两个头文件,两个实现文件

下载Precompiled Binaries For Windows中的sqlite-dll-win32-x86-3071300.zip,该包中含有一个def文件,一个dll文件

新建一个win32控制台应用程序sqlite,选择空项目。

方法一:将所得dllsqlite3.hsqlite3.lib文件拷贝到../工程/sqlite/下,点击头文件,选择添加现有项,选择拷贝的sqlite.h文件,选择工程->属性->链接->输入->附加依赖项,填写sqlite3.lib,再在原文件中编写自己的主程序。

方法二:将sqlite3.hsqlite3.csqlite3.lib文件拷贝../工程/sqlite/下,点击头文件,选择添加现有项,选择拷贝的sqlite3.h文件。点击源文件添加现有项,选择拷贝的sqlite3.c文件,选择工程->属性->链接->输入->附加依赖项,填写sqlite3.lib,然后开始自己的主程序。

示例代码

文件my_db.hsqlite3.h

文件sqlitedb.cpptest.cpp

————————————————————————————————————————————

my_db.h代码

#ifndef MY_DB_H

#define MY_DB_H

int open_db();

int create_table();

int drop_table();

int insert_data(int id,char *name,int age);

int search_data(int id);

int search_data(char *name);

int delete_data(int age);

#endif

———————————————

sqlitedb.cpp代码

#include "sqlite3.h"

#include "mydb.h"

#include <iostream>

using namespace std;

sqlite3 *db = NULL; //定义数据库连接

const char *errMsg = 0; //定义错误信息

char *zerrMsg = 0; //定义错误信息

//打开数据库

int open_db()

{

int rc = sqlite3_open("E:/Program code/sqlite code/sqlitedb.db",&db); //打开数据库

if(rc != sqlITE_OK) //数据库打开失败

{

errMsg = sqlite3_errmsg(db); //获取错误信息

cout<<errMsg<<endl;

sqlite3_close(db); //关闭数据库连接

return -1;

}

cout<<"open database successfully!"<<endl;

return 0;

}

//创建表

int create_table()

{

if(open_db() != 0)

{

open_db();

}

char *sql = "create table tab(id int primary key,name varchar(20),age int)";

int rc = sqlite3_exec(db,sql,NULL,&zerrMsg);

if(rc != sqlITE_OK)

{

errMsg = sqlite3_errmsg(db);

cout<<errMsg<<endl; // cout<<zerrMsg<<endl;

sqlite3_close(db);

return -1;

}

cout<<"创建表成功!"<<endl;

return 0;

}

//删除

int drop_table()

{

if(open_db() != 0)

{

open_db();

}

char *sql = "drop table tab";

int rc = sqlite3_exec(db,&zerrMsg);

if(rc != sqlITE_OK)

{

errMsg = sqlite3_errmsg(db);

cout<<errMsg<<endl; // cout<<zerrMsg<<endl;

sqlite3_close(db);

return -1;

}

cout<<"删除表成功"<<endl;

return 0;

}

//数据添加

int insert_data(int id,int age)

{

if(open_db() != 0)

{

open_db();

}

sqlite3_stmt *stmt = NULL; //准备语句对象

char *sql = "insert into tab(id,name,age) values(?,?,?)";

int rc = sqlite3_prepare_v2(db,strlen(sql),&stmt,NULL);

if(rc != sqlITE_OK)

{

errMsg = sqlite3_errmsg(db);

cout<<errMsg<<endl;

if(stmt)

{

sqlite3_finalize(stmt);

}

sqlite3_close(db);

return -1;

}

sqlite3_bind_int(stmt,1,id);

//参数一:准备语句对象参数二:序号(从开始)参数三:字符串值参数四:字符串长度参数五:函数指针,sqlITE3执行完操作后回调此函数,通常用于释放字符串占用的内存。(这个函数指针参数具体怎么使用,我现在还不清楚

sqlite3_bind_text(stmt,2,strlen(name),NULL);

sqlite3_bind_int(stmt,3,age);

if(sqlite3_step(stmt) != sqlITE_DONE)

{

cout<<"插入数据失败!"<<endl;

sqlite3_finalize(stmt);

sqlite3_close(db);

return -1;

}

cout<<"数据插入成功!"<<endl;

sqlite3_reset(stmt);

sqlite3_finalize(stmt);

sqlite3_close(db);

return 0;

}

//数据查询根据id唯一性查询

int search_data(int id)

{

if(open_db() != 0)

{

open_db();

}

char *sql = "select * from tab where id = ?";

sqlite3_stmt *stmt = NULL;

int rc = sqlite3_prepare_v2(db,id);

int nColumn = sqlite3_column_count(stmt); //获取数据库表的列数

int type; //表字段所对应的类型

rc = sqlite3_step(stmt);

if(rc == sqlITE_ROW)

{

for(int i=0;i<nColumn;i++)

{

type = sqlite3_column_type(stmt,i);

if(type == sqlITE_INTEGER)

{

cout<<sqlite3_column_name(stmt,i)<<"\t"<<sqlite3_column_int(stmt,i)<<endl;

}

if(type == sqlITE_TEXT)

{

cout<<sqlite3_column_name(stmt,i)<<"\t"<<sqlite3_column_text(stmt,i)<<endl;

}

else if(type == sqlITE_NULL)

{

cout<<"no value"<<endl;

}

}

}

else if(rc == sqlITE_DONE)

{

cout<<"select finish!"<<endl;

}

else

{

cout<<"select fail"<<endl;

sqlite3_finalize(stmt);

}

sqlite3_finalize(stmt);

sqlite3_close(db);

return 0;

}

//数据查询根据姓名批量查询

int search_data(char *name)

{

if(open_db() != 0)

{

open_db();

}

char *sql = "select * from tab where name = ?";

sqlite3_stmt *stmt = NULL;

int rc = sqlite3_prepare_v2(db,NULL);

if(rc != sqlITE_OK)

{

errMsg = sqlite3_errmsg(db);

cout<<errMsg<<endl;

if(stmt)

{

sqlite3_finalize(stmt);

}

sqlite3_close(db);

return -1;

}

sqlite3_bind_text(stmt,NULL);

int nColumn = sqlite3_column_count(stmt);

int type;

rc = sqlite3_step(stmt);//如果是select语句,且有还有记录,则应该返回sqlITE_ROW

while(true) {

if(rc == sqlITE_ROW)

{

cout<<"--------------"<<endl;

for(int i=0;i<nColumn;i++)

{

type = sqlite3_column_type(stmt,i);

if(type == sqlITE_INTEGER)

{

cout<<sqlite3_column_name(stmt,i)<<"\t"<< sqlite3_column_int(stmt,i)<<endl;

}

if(type == sqlITE_TEXT)

{

cout<<sqlite3_column_name(stmt,i)<<"\t"<< sqlite3_column_text(stmt,i)<<endl;

}

else if(type == sqlITE_NULL)

{

cout<<"no value"<<endl;

}

}

}

else if(rc == sqlITE_DONE)

{

cout<<"select finish!"<<endl;

}

else

{

cout<<"select fail"<<endl;

sqlite3_finalize(stmt);

}

if (sqlite3_step(stmt) != sqlITE_ROW)

break;

}

sqlite3_finalize(stmt);

sqlite3_close(db);

return 0;

}

//删除数据

int delete_data(int age)

{

if(open_db() != 0)

{

open_db();

}

char *sql = "delete from tab where age = ?";

sqlite3_stmt *stmt = NULL;

int rc = sqlite3_prepare_v2(db,age);

rc = sqlite3_step(stmt);//如果是update,delete,insert等语句,正常应该返回sqlITE_DONE

if(rc == sqlITE_DONE)//sqlITE_DONE意味着已成功完成执行该语句

{

cout<<"删除数据成功"<<endl;

}

sqlite3_finalize(stmt);

sqlite3_close(db);

return 0;

}

———————————————

test.cpp代码

#include "mydb.h"

#include <iostream>

using namespace std;

int main()

{

open_db();

//create_table();

//drop_table();

//insert_data(2,"wang",24);

//search_data(1);

//search_data("wang");

//delete_data(24);

return 0;

}

———————————————

最后再为大家推荐几款管理工具,希望对大家有更好地帮助。

管理工具也有不少,这里介绍几款:

1sqlite Manager开放源代码SQLite管理工具,用来管理本地电脑上的sqlite数据库,可以独立运行(以XULRunner方式),也可以作为FirefoxThunderbirdSeamonkeySongbirdKomodoGecko等的插件

2sqlite Administrator是一个用来管理 SQLite 数据库文件的图形化工具,可进行创建、设计和管理操作。提供代码编辑器具有自动完成和语法着色,支持中文,适合初学者。

3sqlite Database browser是一个 sqlite 数据库的轻量级GUI客户端,基于Qt库开发,界面清洁,操作简单,主要是为非技术用户创建、修改和编辑sqlite数据库的工具,使用向导方式实现。

原文链接:https://www.f2er.com/sqlite/201267.html

猜你在找的Sqlite相关文章