使用c++控制sqlite3
首先,到官网下载相关的压缩包
https://www.sqlite.org/download.html
但是要自己再重新编译一个, 博主自己收集了一下,密码:hixo
https://pan.baidu.com/s/1Zdp0UMl2Mr4J2JUe28G7JQ
将该压缩包放在你想要放置的文件夹里,情况是这样的
然后在该路径下运行cmd,可以直接在地址栏中输入cmd并回车
然后输入 命令
sqlite3 databaseName.db
如果databaseName 名字的数据库在该路径下存在,则进入该数据库,如果不存在,则创建该数据库
然后就可以正常使用了, 如使用 .table 可以查看所有表, .exit可以退出(似乎这种数据库命令,不是sql语句的sqlite都是前面加 .)
该数据库允许navicat连接, (点连接,选择数据库位置即可)
接下去用 c++ 连接
当前示例数据库结构
table|user|user|2|CREATE TABLE "user" (
"id" INTEGER NOT NULL,
"account" TEXT(100),
"userName" TEXT(100),
"password" TEXT(100),
"address" TEXT(100),
"IDNumber" TEXT(100),
"openDate_year" INTEGER,
"openDate_month" INTEGER,
"openDate_day" INTEGER,
"isLost" INTEGER,
"lostDate_year" INTEGER,
"lostDate_month" INTEGER,
"lostDate_day" INTEGER,
"salt" TEXT,
PRIMARY KEY ("id" ASC)
)
基本读取
bool read() {
sqlite3_stmt* stmt; //编译的sql语句和操作的存储类
sqlite3 * conn; //用于保存与sqlite3的连接
if (sqlite3_open("D:\\c++ study\\nicobank\\NicoNicoBank\\NicoNicoBank\\database\\bank.db", &conn) != SQLITE_OK) {
return false;
} //打开连接, 参数为数据库和sqlite3类
sqlite3_prepare_v2(conn, "select * from user where account = \"test\";", -1, &stmt, 0);
//预编译sql语句, 参数为,sqlite3类的连接(已打开),sql语句,可能是数据长度,填-1就会自己计算, sqlite3_stmt类, 最后一个我也不知道啥
int result = sqlite3_step(stmt);
while (sqlite3_step(stmt) == SQLITE_ROW) { //进行相关的执行步骤, 每次调用可以获取一行的值,因此可以多次调用
int id = sqlite3_column_int(stmt, 0);
cout << id << endl; //获取当行指定列的值
}
}
基本写入
bool write() {
sqlite3 * conn;
if (sqlite3_open("d:\\c++ study\\nicobank\\niconicobank\\niconicobank\\database\\bank.db", &conn) != SQLITE_OK) {
return false;
}
sqlite3_stmt * stmt = NULL;
string sql = "insert into user (account, userName, password, address, IDNumber, openDate_year,openDate_month, openDate_day, isLost, lostDate_year, lostDate_month, lostDate_day) values (?,?,?,?,?,?,?,?,?,?,?,?);";
//(id, account, username, password, address, idnumber, opendate_year,opendate_month, opendate_day, islost, lostdate_year, lostdate_month, lostdate_day)
sqlite3_prepare_v2(conn, sql.c_str(), -1, &stmt, 0);
//上述内容解释同read()
//需要注意的是?为占位符,可以通过sqlite3_bind_类型 这一组函数去绑定相关值,而问号位置是由1开始计算的
string a = "test";
string tempStr[5];
for (int i = 0; i < 5; i++) tempStr[i] = "str";
int tempInt[7];
for (int i = 0; i < 7; i++) tempInt[i] = 1;
//简单初始化一些数值用于传值 for (int i = 1; i <= 5; i++) {
sqlite3_bind_text(stmt, i, tempStr[i-1].c_str(), -1, NULL);
//绑定第1到第5个问号
//参数分别为stmt类, 问号位置,传入的值,字符串长度,-1则函数自行计算,我也不知道是啥但是可以填NULL的地方
}
for (int i = 6; i <= 12; i++) {
sqlite3_bind_int(stmt, i, tempInt[i-6]);
//绑定整数,stmt类,问号位置,传入值
}
int result = sqlite3_step(stmt); //执行命令
sqlite3_finalize(stmt); //关闭连接,避免
return false;
}
使用c++控制sqlite3的更多相关文章
- SQLite源程序分析之sqlite3.c
/****************************************************************************** ** This file is an a ...
- sqlite3 shell的使用
sqlite的安装 1. 首先是下载sqlite,可以该页面下载:http://www.sqlite.org/download.html 当前的最新版本为:sqlite-shell-win32-x86 ...
- SQLite3 学习笔记
1.数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) NSCoding(NSKeyedArchiver\NSkeye ...
- SQLITE3 使用总结
转自: http://blog.chinaunix.net/uid-8447633-id-3321394.html 前序: Sqlite3 的确很好用.小巧.速度快.但是因为非微软的产品,帮助文档总觉 ...
- sqlite3常用命令&语法
sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常不错的嵌入式数据库,SQLite大量的被用于手机,PDA,MP3播放器以及机顶盒设备. Mozilla Firefox使用SQLit ...
- sqlite3编程使用简介
sqlite3使用范围 SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化: 1.易于管理 2.易于使用 3.易于嵌入其他大型程序 4.易于维护和配置 许多人喜欢SQLi ...
- IOS异步和多线程操作&&在sqlite3中的应用
1,数据库I/O操作(异步) 数据库本身是存储在磁盘上.访问和修改数据库,即对磁盘进行读写,即I/O操作. 磁盘属于计算机硬件,具有DMA能力,不需要CPU干预,可以实现异步操作. I/O操作一般是消 ...
- Ubuntu下sqlite3的安装及使用
Sqlite是一款轻型的数据库,实现了多数SQL-92标准,包括事务(原子性,一致性,隔离性和持久性 ACID),触发器与多数复杂查询.对于一个移动手持设备的应用开发者,Sqlite是居家旅行必备数据 ...
- iOS sqlite3数据库解析
看来从版本3.3.1基本上已经支持线程句柄的传递功能.具体限制我标记了一下.(6) Is SQLite threadsafe?SQLite is threadsafe. We make this co ...
随机推荐
- pat1068. Find More Coins (30)
1068. Find More Coins (30) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva l ...
- php7.0.24-nts配置步骤
php-cgi.exe文件运行 php-cgi.exe -b 127.0.0.1:9000 -c D:/myphp2017/php7-nts/php.ini nginx命令 启动 start ngin ...
- xmlDemo4j解析
package lianxi; import java.util.Iterator;import java.util.List;import java.io.File;import java.io.F ...
- dos命令执行mysql的sql文件
1.cmd进入dos窗口 2.输入cd+ mysql的bin目录后进入bin文件下 3.进入控制台:mysql -uroot -proot 回车 4.选择数据库:use mydata go 回车 5 ...
- 服务器返回的14种常见HTTP状态码
当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...
- vue2.0 $router和$route的区别
在vue2.0里页面参数是 this.$route.query或者 this.$route.params 接收router-link传的参数. 在路由跳转的时候除了用router-link标签以外需要 ...
- PHP switch分支语句中省略break后还会执行其他case的原因分析
请分析以下PHP代码的输出结果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo & ...
- php的yii框架开发总结1
最近用php的yii框架写了一个小的demo,虽然不复杂,但是也学习了很多东西,现在总结一下. 项目需求:为几个教研室写一个日报系统,每个人每天写日报,并且系统有自动实现发邮件功能. 额外要求:1.人 ...
- Linux系统如何设置开机程序自启动
在Linux系统如何让程序开机时自动启动 核心提示:系统的服务在开机时一般都可以自动启动,那在linux系统下如果想要程序在开机时自动启动怎么办?我们知道在 windows系统“开始”--& ...
- tomcat7 的The Apache Tomcat Native library which allows optimal performance 的解决
1. 用Myeclipse启动tomcat7启动时可能会收到下面的信息: 七月 24, 2014 10:13:30 上午 org.apache.catalina.core.AprLife ...