VS 与 SQLite数据库 连接
SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是不够用的。我们需要的sqlite3.lib文件并不在其中,需要我们自己动手了。
这儿要用到visual studio提供的Visual Studio Command Prompt工具了。打开之后,进入含有sqlite3.dll和sqlite3.def的目录下,输入以下命令:
LIB /DEF:sqlite3.def /MACHINE:IX86
就能生成sqlite3.exp和sqlite3.lib文件了,这样在工程中就可以加入lib文件进行编译了。
SEC 1:
因为只是演示API,所以这次在vs2010下建立一个空的win32工程SQLite3Test,在工程的属性-链接-输入中添加sqlite3.lib的引用。添加新的文件main.cpp,写一个main函数,并编译一下。
好,接下来把sqlite3.h/def/exp/lib通通放进SQLite3Test\SQLite3Test\目录下,跟main.cpp在一起,如图:
把sqlite3.dll跟生成的exe放在一起。
SEC 2:
接下来开始进行sqlite3的使用。引入sqlite3.h头文件,并写下如下代码:
#include <iostream>
#include "sqlite3.h"
using namespace std;
int main(int argc, char** argv)
{
sqlite3 * conn = NULL;
char * err_msg = NULL;
char sql[200] = "";
// 打开数据库, 创建连接
if(sqlite3_open("test.db", &conn) != SQLITE_OK)
{
printf("无法打开!");
}
// 关闭连接。
if (sqlite3_close(conn) != SQLITE_OK)
{
printf("无法关闭,错误代码: %s\n", sqlite3_errmsg(conn));
exit(-1);
}
printf("操作成功!\n");
return 0;
}
sqlite3_open的函数原型如下:
SQLITE_API int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
作用就不言而喻了,打开数据库。
第一个参数是数据库文件的名称,如果没有,那就会自动创建一个。
第二个参数是sqlite3的实例句柄的指针的指针。。(看到这儿我想起来,当时在linux下自己写mysql的C++api的时候,也是用的双重指针,搞死个人哟。。)
常言道:“有打开,就有关闭!”,所以sqlite3_close()就起了这个作用。
不过sqlite3_close的原型是这样的:
SQLITE_API int sqlite3_close(sqlite3 *); //要格外注意双重指针和普通指针。。
有了上面的万金油例子,想必已经对初始化有所了解了。运行后就在Debug目录下多了个test.db文件,不过大小为0KB,因为木有内容嘛!
SEC 3:
在数据库中创建表并插入数据。在open和close的之间写入如下代码:
// 执行SQL
sprintf(sql, "CREATE TABLE test_for_cpp \
(id int, name varchar(20), age int)");
if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK)
{
printf("操作失败,错误代码: %s", err_msg);
exit(-1);
}
//添加10条记录
for (int i = 0; i < 10; i++)
{
// 执行SQL
sprintf(sql, "INSERT INTO test_for_cpp \
(id, name, age) VALUES \
(%d, '%s', %d)", i, "testPeople", i);
if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK)
{
printf("操作失败,错误代码: %s", err_msg);
exit(-1);
}
}
sqlite3_exec的原型如下:
SQLITE_API int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
第一个参数为sqlite3实例。
第二个参数为要执行的sql语句。
第三个参数为回调函数的指针。因为这里只是创建表和插入数据,并没有数据返回,所以不需要填写回调函数。以NULL代替。
第四个参数为回调函数所要使用的参数。同第三条。
第五个参数为错误信息。
这次再运行一下,就可以看到test.db已经不再是0KB了。
SEC 4:
再常言道:“有插入,就有读取!”下面来读取数据库文件中的数据。
刚才提到了sqlite3_exec的回调函数,现在需要这个函数了。首先声明一个回调函数:
int sqlite3_exec_callback(void *data, int nColumn,
char **colValues, char **colNames);
四个参数的类型不能变。
然后写下该回调函数的实现:
int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames)
{
for (int i = 0; i < nColumn; i++)
{
printf("%s\t", colValues[i]);
}
printf("\n");
return 0;
}
接下来在插入条目语句的后面写下下面的语句:
// 查询
sprintf(sql, "SELECT * FROM test_for_cpp");
sqlite3_exec(conn, sql, &sqlite3_exec_callback, 0, &err_msg);
TIP: 前面创建表、插入数据的代码可以先注释掉,否则运行一次就会插入10条数据,会造成点困扰。
运行就可以看到结果了:
因为该回调函数每从数据库中取出一条数据就要调用一次,所以这是最耗时间的过程,这块代码应该尽量高效。
这只是一个简单的例子,不过已经足够平时的小众软件使用了。一些高级的用法比如sqlite3_db_mutex(读写互斥锁)、sqlite3_backup_step(差异备份)等等,就可以看看sqlite3官方的教程了(猛戳传送)。
作者:satanness
VS 与 SQLite数据库 连接的更多相关文章
- Java操作Sqlite数据库-jdbc连接
Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...
- onethink连接操作 sqlite 数据库
直接上干货:一个简单的demo onthink本身已经有sqlite数据库的驱动 不需要在下载 common下面的config文件: 'SQLITE'=> array( 'DB_TYPE' =& ...
- VS2010连接SQLite数据库
Visual studio 2010及以上版本,连接SQLite数据库 1.在Sqlite开发站点下载SQLite的.exe安装包 Ctrl+F搜索这条语句:This is the only setu ...
- C#连接SQLite数据库方法
--结合Enterprise Library连接,操作SQLite 企业库是我们常用的框架之一,可以从http://entlib.codeplex.com/下载Enterprise Library 5 ...
- Python3实现连接SQLite数据库的方法
本文实例讲述了Python3实现连接SQLite数据库的方法,对于Python的学习有不错的参考借鉴价值.分享给大家供大家参考之用.具体方法如下: 实例代码如下: ? 1 2 3 4 5 6 7 8 ...
- Perl连接Sqlite数据库
Sqlite是一个小巧的嵌入式关系型数据库,几乎可以嵌入所有编程语言,特别是C,C++,PHP,Perl等.这里就介绍如何用Perl连接并操作Sqlite数据库. use DBI; # perl用以操 ...
- ASP.net与SQLite数据库通过js和ashx交互(连接和操作)
ASP.net与SQLite数据库通过js和ashx交互(连接和操作): 废话(也是思路):用的是VS2010,打算做网站前后台.由于不喜欢前台语言里加些与html和css和js的其他内容,想实现前后 ...
- 一起学微软Power BI系列-使用技巧(6) 连接Sqlite数据库
好久没有研究Power BI了,看到高飞大神弄的东西,太惭愧了.今天有个小东西,数据在Sqlite里面,想倒腾到Power BI Desktop里面折腾一下,结果发现还不直接支持.所以只好硬着头皮上去 ...
- python web开发-flask连接sqlite数据库
在之前的文章中我们介绍了如何在centOS中安装sqlite数据库. Sqlite安装完成后,本节就用flask来连接和操作sqlite数据库. 1. 数据准备 先在sqlite3中创建一 ...
随机推荐
- 使用py2exe打包你的py程序
软件环境:python3.3.4 + PyQt5 使用py2exe打包写好的py文件,过程如下: 在你要打包的代码文件(比如sample.py)的同文件夹建立一个python代码文件(比如setup. ...
- Windows phone 8 学习笔记(9) 集成(转)
本节整理了之前并没有提到的Windows phone 8 系统相关集成支持,包括选择器.锁定屏幕的.联系人的访问等.选择器列举了若干内置应用提供的相关支持:锁定屏幕展示了我们可以对锁定屏幕提供背景图像 ...
- Deal with Android phones with pattern lock on
Yesterday my colleague asked me for help...She has two android phones , one is hTC and the other is ...
- sed的惯常用法
1:注释掉某一行这个经常会遇到的,把配置文件里某一行注释掉.让他不起作用.sed -i -e ’121 s/^/#/’ /usr/local/apache2/conf/httpd.conf上面一行命令 ...
- 《你是我的小羊驼》游戏源码 v1.0
游戏分析三个界面基本上就是整个游戏的全部内容:1.左边的是主界面,展示游戏名称以及主角,让玩家对游戏的整体画风有个大概的印象.2.中间的是游戏界面,点击空格防止橙色六边形砖块来围堵小羊驼.3.右边的是 ...
- 商业模拟游戏:<柠檬汁杰克>ios游戏源码
首先柠檬汁杰克是我个人的首个cocos2d-x开发的游戏,本人虽然混迹编程十几年从未开发过游戏,这是首例. 我选这个游戏因为逻辑比较简单,也是一款苹果上的经典游戏.开发中我用到了CocoStudio, ...
- [原]Python 简单文件处理
仅仅是为了Linux操作方便= =命令行最近没有时间仔细看看,电脑一直都在机房,暂且这般记着吧= = spath="D:/download/baa.txt" f=open(spat ...
- ThinkPHP5中Session的使用
由于用惯了ThinkPHP之前的版本,一想到要用Session就直接用$_SESSION来存取,今天看了ThinkPHP5的手册,才发现原来这么用时不安全滴.ThinKPHP5对Session进行了封 ...
- [leetcode]_Merge Sorted Array
题目:合并两个有序数组A , B,将合并后的数组存到A中.假设A的空间足够装下A和B所有的元素. 思路:这道题考虑如果正向扫描两个数组,则每插入一个元素,则需移动A后的所有元素.换个角度想,既然元素个 ...
- qemu-kvm简单使用
qemu-kvm主要有以下几个选项: -snapshot: 创建快照 -m: 指定内存大小 -smp: 指定处理器个数 -cpu: 指定CPU类型 -name: 设置虚拟机名称 -vnc: 使用vnc ...