zoukankan      html  css  js  c++  java
  • 使用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;
    }
    
  • 相关阅读:
    状态模式作业
    建造者模式作业
    关于 IIS 上的 Speech 设置
    装饰模式作业
    《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
    谈一谈为什么我要创建个人博客
    C#网站发布在IIS10上,Access数据库读取为空白的解决方案
    广义表 Head Tail
    c# asp.net4.0尚未在web服务器上注册
    装饰者模式(例子)
  • 原文地址:https://www.cnblogs.com/Phoenix-blog/p/9533051.html
Copyright © 2011-2022 走看看