根据myData::myData() { //数据库的打开就可以了 int res = sqlite3_open("./data/user.db", &this->mydb); if (res == SQLITE_OK) { cout << "数据库打开success" << endl; this->creatData(); } else { cout << sqlite3_errmsg(this->mydb); } } 、myData* myData::getMyData() { if (myData::intence == nullptr) { myData::intence = new myData;//懒汉模式:需要的时候才准备的 } return myData::intence; } void myData::creatData() { char *errmsg = nullptr; char sql[] = "create table if not exists user (account text not null,password text not null);" "create table if not exists car (cpn text not null,time text not null);"; int ret = sqlite3_exec(this->mydb, sql, NULL, NULL, &errmsg); if (ret == SQLITE_OK) { cout << "exec ok" << endl; } else { cout << "exec error" << endl; cout << sqlite3_errmsg(this->mydb); sqlite3_free(errmsg); } }、void myData::getData_exec(const char* sql, int& row, int& col, char**& qress) { char* errmsg = nullptr; int res = sqlite3_get_table(this->mydb, sql, &qress, &row, &col, &errmsg); if (res == SQLITE_OK) { } else { cout << sqlite3_errmsg(this->mydb); sqlite3_free(errmsg); } }修改void CTool::load_data_from_db() { // 连接数据库 db = new Database("localhost", "root", "password", "mydb"); db->connect(); // 读取数据 vector<Record> data = db->query("SELECT * FROM mytable"); // 填充控件 for (auto ctrl : ctrlArry) { if (ctrl->getType() == CtrlType::TEXTBOX) { // 如果是文本框,设置文本内容 dynamic_cast<TextBox*>(ctrl)->setText(data[0].getString("textbox_value")); } else if (ctrl->getType() == CtrlType::COMBOBOX) { // 如果是下拉框,添加选项 for (auto option : data[0].getStringList("combobox_options")) { dynamic_cast<ComboBox*>(ctrl)->addItem(option); } } else if (ctrl->getType() == CtrlType::LISTBOX) { // 如果是列表框,添加行数据 for (auto row : data) { dynamic_cast<ListBox*>(ctrl)->addRow(row.getString("listbox_value")); } } } // 断开数据库连接 db->disconnect(); delete db; }
时间: 2023-06-13 14:08:08 浏览: 157
这段代码涉及到了数据库的操作,原来的代码使用了sqlite3库进行操作,而修改后的代码使用了一个名为Database的类进行操作。具体来说,原来的代码中myData类的构造函数打开了名为user.db的数据库,并在其中创建了两张表,creatData函数负责执行创建表的SQL语句。getData_exec函数执行了SQL语句并返回结果。而修改后的代码中,load_data_from_db函数初始化了一个名为db的Database对象,并连接了一个名为mydb的数据库,然后通过query函数查询"SELECT * FROM mytable"语句并将结果保存在data变量中。最后,根据控件类型,将数据填充到对应的控件中。最后,断开数据库连接并释放内存。
相关问题
通过调用void myData::getData_exec(const char* sql, int& row, int& col, char**& qress) { char* errmsg = nullptr; int res = sqlite3_get_table(this->mydb, sql, &qress, &row, &col, &errmsg); if (res == SQLITE_OK) { } else { cout << sqlite3_errmsg(this->mydb); sqlite3_free(errmsg); } }实现yixia函数的功能void CTool::load_data_from_db() { string sql = "SELECT * FROM car"; db.query(sql); vector<myData> data_list; while (db.next()) { myData data; data.id = db.getInt("id"); data.name = db.getString("name"); data.age = db.getInt("age"); data_list.push_back(data); } for (int i = 0; i < data_list.size(); i++) { CEditBox* edit_box = new CEditBox(x + 10, y + 10 + i * 30, w - 20, 20); edit_box->setText(data_list[i].name + " " + to_string(data_list[i].age)); ctrlArry.push_back(edit_box); } }
这段代码的作用是从 SQLite 数据库中查询 "car" 表中的所有数据,并将结果存储到一个 vector 中。然后,根据数据数量循环创建相应数量的 CEditBox 对象,并将每个数据的姓名和年龄拼接成一个字符串后设置为 CEditBox 的文本内容。最后,将创建的所有 CEditBox 对象添加到 ctrlArry 中。
具体实现是通过调用 myData 类中的 getData_exec 函数执行 SQL 查询语句,将查询结果存储到 char** 类型的 qress 变量中,然后通过遍历 qress 数组将每个数据转换为 myData 类型的对象,并将其添加到 data_list 中。
需要注意的是,在使用完 char** 变量后,需要调用 sqlite3_free 函数释放内存空间,以避免内存泄漏。
train:C:/Users/86152/PycharmProjects/pythonProject/ultralytics-main/mydata_tuomin/mydata_tuomin/ImageSets/train.txt val:C:/Users/86152/PycharmProjects/pythonProject/ultralytics-main/mydata_tuomin/mydata_tuomin/ImageSets/val.txt test:C:/Users/86152/PycharmProjects/pythonProject/ultralytics-main/mydata_tuomin/mydata_tuomin/ImageSets/test.txt nc:2 names: 0:person 1:car
这看起来像是一些关于数据集的信息,你的数据集有三个子集:train、val和test,其中train.txt是用于训练的图像文件列表,val.txt是用于验证的图像文件列表,test.txt是用于测试的图像文件列表。此外,你的数据集中有两个类别:person和car,0代表person类别,1代表car类别。
阅读全文