qt操作sqlite类封装,及命令行导入csv文件到sqlite数据库,具有选择、过滤、固定、等类似excel的基本功能
时间: 2023-07-15 14:13:53 浏览: 176
以下是一个简单的Qt操作SQLite的类封装:
```cpp
#include <QtCore>
#include <QtSql>
class SqliteWrapper
{
public:
SqliteWrapper(const QString &dbName) : m_dbName(dbName) {}
bool open()
{
m_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName(m_dbName);
return m_db.open();
}
bool close()
{
m_db.close();
return true;
}
QStringList tables() const
{
return m_db.tables(QSql::Tables);
}
bool execute(const QString &query)
{
QSqlQuery q(m_db);
return q.exec(query);
}
QStringList columns(const QString &table) const
{
QSqlRecord record = m_db.record(table);
QStringList fields;
for (int i = 0; i < record.count(); ++i)
fields << record.field(i).name();
return fields;
}
QSqlQuery select(const QString &table, const QString &columns = "*", const QString &where = "")
{
QString query = QString("SELECT %1 FROM %2").arg(columns).arg(table);
if (!where.isEmpty())
query += QString(" WHERE %1").arg(where);
QSqlQuery q(m_db);
q.exec(query);
return q;
}
bool insert(const QString &table, const QMap<QString, QVariant> &values)
{
QStringList fields = values.keys();
QStringList placeholders;
for (int i = 0; i < fields.count(); ++i)
placeholders << QString(":%1").arg(fields.at(i));
QString query = QString("INSERT INTO %1 (%2) VALUES (%3)").arg(table).arg(fields.join(", ")).arg(placeholders.join(", "));
QSqlQuery q(m_db);
for (int i = 0; i < fields.count(); ++i)
q.bindValue(QString(":%1").arg(fields.at(i)), values.value(fields.at(i)));
return q.exec(query);
}
private:
QString m_dbName;
QSqlDatabase m_db;
};
```
使用该类封装进行SQLite操作,可参考以下示例:
```cpp
SqliteWrapper db("test.db");
db.open();
db.execute("CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");
db.insert("person", {{"name", "Tom"}, {"age", 20}});
db.insert("person", {{"name", "Jerry"}, {"age", 18}});
QSqlQuery q = db.select("person", "*", "age > 19");
while (q.next())
{
qDebug() << q.value("name").toString() << q.value("age").toInt();
}
db.close();
```
关于命令行导入csv文件到SQLite数据库,可参考以下示例:
```bash
sqlite3 test.db ".mode csv" ".import data.csv person"
```
其中,test.db 是数据库文件名,data.csv 是CSV文件名,person 是表名。如果CSV文件中的列名与表中的列名不同,需要使用 .import 命令的第二个参数指定列名。例如:
```bash
sqlite3 test.db ".mode csv" ".import data.csv person(name, age)"
```
这里指定了 CSV 文件中的列名为 name 和 age,对应表中的列名为 name 和 age。
阅读全文