标签:insert asc img 自己 指定 数据 nav ase 允许
首先,到官网下载相关的压缩包
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; }
标签:insert asc img 自己 指定 数据 nav ase 允许
原文地址:https://www.cnblogs.com/Phoenix-blog/p/9533051.html