使用sqlite3的自定义类

ulmd4ohb  于 2023-06-06  发布在  SQLite
关注(0)|答案(1)|浏览(207)

我是新来的,但我已经跟随你很长时间了,我多次从你那里得到灵感来解决一些问题。现在我给你这个新问题:对于一个更大的项目,我必须使用C++中的Sqlite3库创建一个适合我需要的对象。显然我已经搜索了很多,但我找不到这个问题的答案:我试图创建一个方法,通过引用(指针)传递,能够查询表并将结果以测试格式导出到main函数,使用“sqlite3_column_text()”函数。我不能得到预期的结果。也许通过发布一些代码,我将能够更清楚。

#include <sqlite3.h>
#include <iostream>
#include <cstring>

using namespace std;

class dbase
{
    public:
        dbase(const char* dbfile);
        void db_query(unsigned char** pas_t, char* sql);
        virtual ~dbase();

    private:
     sqlite3* db;
     sqlite3_stmt* stmt;
};

dbase::dbase(const char* dbfile)
{
   sqlite3_open(dbfile, &db);
}

void dbase::db_query(unsigned char** pas_t, char* sql){
    sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
    int i = 0;
    const unsigned char** pr = new const unsigned char*[3];

    while ((sqlite3_step(stmt)) == SQLITE_ROW) {
            pr[i] = sqlite3_column_text(stmt, 0);
            pas_t[i] = (unsigned char*)pr[i];
            cout << "pas_t = " << pas_t[i] << "  " << endl;
        i++;
    } cout << "\nend\n" << endl;

}

dbase::~dbase()
{
    sqlite3_finalize(stmt);
    sqlite3_close(db);
}

int main() {
    dbase* db = new dbase("./Test.db");
    unsigned char** glb = new unsigned char*[4];
    db->db_query(glb, (char*)"SELECT Nome FROM Test");
   int n = 0;
   while(glb[n] != NULL){
        cout << "glb -- " << glb[n] << "--" << n << endl;
        n++;
    }

    delete glb;
    db->~dbase();
    return 0;
}

risultato:

pas_t = primo  
pas_t = secondo  
pas_t = terzo  

end

glb -- ���?V--0
glb -- ���?V--1
glb -- ���?V--2

unsigned char**glb变量应该包含这三个字符串。

p5cysglq

p5cysglq1#

谢谢你的帮助,我的信已经到了一个结论,那就是我的信不是我写的,而是我的信。

#include <sqlite3.h>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

class dbase
{
    public:
        dbase(const char* dbfile);
        std::vector<string> db_query(char* sql);
        virtual ~dbase();

    private:
     sqlite3* db;
     sqlite3_stmt* stmt;
};

dbase::dbase(const char* dbfile)
{
   sqlite3_open(dbfile, &db);
}

std::vector<string> dbase::db_query( char* sql){
    std::vector<string>pas_t;
    sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
    int i = 0;
    while ((sqlite3_step(stmt)) == SQLITE_ROW) {
           std::string result = std::string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)));
           pas_t.push_back(result);
           cout << "pas_t = " << pas_t[i] << "  " << endl;
        i++;
    } cout << "\nend\n" << endl;

    return pas_t;
}

dbase::~dbase()
{
    sqlite3_finalize(stmt);
    sqlite3_close(db);
}

int main() {
    dbase* db = new dbase("./Test.db");
    vector<string> glb;
    glb = db->db_query((char*)"SELECT Nome FROM Test");
   int n = 0;
   while(glb[n] != ""){
        cout << "glb -- " << glb[n] << "--" << n << endl;
        n++;
    }
    db->~dbase();
    return 0;
}

相关问题