qt操作sqlite类封装导入csv文件到sqlite数据库
时间: 2023-07-15 07:14:00 浏览: 121
以下是一个基于Qt操作SQLite数据库的封装类,可以实现将CSV文件导入到SQLite数据库中:
```cpp
#include <QtSql>
#include <QFile>
class SqliteHelper
{
public:
SqliteHelper(const QString& dbName)
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbName);
}
bool open()
{
if (!db.open()) {
return false;
}
return true;
}
bool execute(const QString& sql)
{
QSqlQuery query(db);
if (!query.exec(sql)) {
return false;
}
return true;
}
bool importCsv(const QString& tableName, const QString& csvFilePath)
{
QFile file(csvFilePath);
if (!file.open(QIODevice::ReadOnly)) {
return false;
}
QTextStream in(&file);
QStringList fields;
QString line = in.readLine();
fields = line.split(",");
QString createSql = "CREATE TABLE " + tableName + " (";
for (int i = 0; i < fields.count(); i++) {
createSql += fields.at(i) + " TEXT";
if (i != fields.count() - 1) {
createSql += ",";
}
}
createSql += ")";
if (!execute(createSql)) {
return false;
}
QSqlQuery query(db);
QString insertSql = "INSERT INTO " + tableName + " (";
for (int i = 0; i < fields.count(); i++) {
insertSql += fields.at(i);
if (i != fields.count() - 1) {
insertSql += ",";
}
}
insertSql += ") VALUES (";
for (int i = 0; i < fields.count(); i++) {
insertSql += "?";
if (i != fields.count() - 1) {
insertSql += ",";
}
}
insertSql += ")";
while (!in.atEnd()) {
line = in.readLine();
QStringList values = line.split(",");
query.prepare(insertSql);
for (int i = 0; i < values.count(); i++) {
query.addBindValue(values.at(i));
}
if (!query.exec()) {
return false;
}
}
return true;
}
private:
QSqlDatabase db;
};
```
使用该类的示例代码如下:
```cpp
SqliteHelper helper("test.db");
if (helper.open()) {
if (helper.importCsv("my_table", "my_data.csv")) {
qDebug() << "Import success!";
} else {
qDebug() << "Import failed!";
}
} else {
qDebug() << "Open database failed!";
}
```
其中,`test.db` 是数据库文件名,`my_table` 是将要创建的表名,`my_data.csv` 是CSV文件路径。
需要注意的是,上述代码中的CSV文件必须满足以下条件:
- 文件第一行为表格字段名;
- 文件中每行数据使用逗号分隔;
- 文件编码为UTF-8。