• C++连接sqlite数据库的坑


    新的第一次用vs2013搞 C++连接sqlite数据库,遇到了很多问题,我也不搞不懂~~~下面写点小体会

    首先:

    你要先配置好sqlite的环境

    参考链接:

    https://blog.csdn.net/ijinfu/article/details/68485273

    https://www.cnblogs.com/chechen/p/7356010.html

    配置好之后捏:

    跟着写,跟着操作,结果运行出现了许多   不是找不到数据库  就是 no such table,我真的是  吃柠檬吧!!!

    下面给上我的测试代码:

    数据创建路径,这个是非常重要的,不然到时候读取不到~

    随便在一个盘建个文件夹名字自己想  如 :  D:sqlite

    接着 cmd 

    进入到文件夹目录,可以开始创建数据库了

    创建数据库命令  : sqlite3  数据库名字  如:sqlite3 test.db;

    创建完数据就是建表了: 

    CREATE TABLE student( 
    
    ID INT PRIMARY KEY NOT NULL, 
    NAME TEXT NOT NULL, 
    
    AGE INT NOT NULL, 
    
    ADDRESS CHAR(50),
    
    FEES REAL 
    );

     表格创建完毕,没有数据怎么办?当然是插入~

    INSERT INTO student (ID,NAME,AGE,ADDRESS,FEES) 
    
    VALUES (1, 'Maxsu', 27, 'Shengzhen', 20000.00); 
    
    INSERT INTO student (ID,NAME,AGE,ADDRESS,FEES) 
    
    VALUES (2, 'Minsu', 25, 'Beijing', 15000.00 ); 
    
    INSERT INTO student (ID,NAME,AGE,ADDRESS,FEES) 
    
    VALUES (3, 'Avgsu', 23, 'Shanghai', 2000.00 ); 
    
    INSERT INTO student (ID,NAME,AGE,ADDRESS,FEES) 
    
    VALUES (4, 'Linsu', 25, 'Guangzhou', 65000.00 ); 
    
    INSERT INTO student (ID,NAME,AGE,ADDRESS,FEES) 
    
    VALUES (5, 'Sqlsu', 26, 'Haikou', 25000.00

    如图:

    ok,接下来是代码部分~~(代码也是参考修改的)

    #include "stdafx.h"  
    #include "sqlite3.h"  
    #include <iostream>  
    using namespace std;
    
    sqlite3 * pDB = NULL;
    
    
    //查找  
    bool SelectUser();
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        //打开路径采用utf-8编码  
        //如果路径中包含中文,需要进行编码转换  
      //路径非常重要,如果找不到,会自己创一个新的
        int nRes = sqlite3_open("D:\sqlite\test.db", &pDB);
        if (nRes != SQLITE_OK)
        {
            cout << "Open database fail: " << sqlite3_errmsg(pDB);
            goto QUIT;
        }
    
        //查找 
        if (!SelectUser())
        {
            
            goto QUIT;
        }
    
    QUIT:
        sqlite3_close(pDB);
    
        return 0;
    }
    
    
    static int UserResult(void *NotUsed, int argc, char **argv, char **azColName)
    {
    
        for (int i = 0; i < argc; i++)
        {
            
            cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << ", ";
        }
        cout << endl;
        return 0;
    }
    
    bool SelectUser()
    {
        char* cErrMsg;
        int res = sqlite3_exec(pDB, "select * from student;", UserResult, 0, &cErrMsg);
    
        if (res != SQLITE_OK)
        {
            cout << "select fail: " << cErrMsg << endl;
            return false;
        }
        return true;
    }

     

    当然了你以为就成功了么 结果运行发现 不是找不到database  就是没发现table

    怎么办?

    先看看 有没有表:

     没有student表  

    当然是再到命令窗口 继续建表和插入数据了

    .open   test.db;    //打开一个数据库,没有会新建
    
    .database;     //查看数据库
    
    .table     //查看数据表  是否存在
    
    select  * from  student;    //查看数据

     ok    再次创建完毕,运行

     关于第一次没有找到表,我也不知道什么鬼,但是我确实有创建,而再次创建就出来了,有点搞不懂。。。有遇到这样的情况么  欢迎骚扰~~~~

    如果你有更好的连接方法,欢迎留言,一起交流~~~·

  • 相关阅读:
    单例模式的四种方式
    创建者模式
    抽象工厂模式
    工厂方法模式
    【位运算符与逻辑运算符知识点】【二进制枚举子集】【just for 状压】
    【数学基础】【欧拉定理模板】【费马小定理】
    【练习赛补题】poj 3026 Borg Maze 【bfs+最小生成树】【坑~】
    【数学基础】【欧拉函数解析模板】【欧拉筛法实现求1~n】【求某个数字n】
    【 数学基础】【素数线性筛法--欧拉筛法模板】【普通筛法的优化】
    【练习赛2补题】poj 2325 Persistent Numbers 【高精度除法+贪心】
  • 原文地址:https://www.cnblogs.com/maoye520/p/11212483.html
Copyright © 2020-2023  润新知