### 使用 QT 将数据插入数据库的示例
以下是基于 SQLite 和 MySQL 数据库的两种方法来实现将数据插入到数据库中的示例代码。
#### 方法一:使用 SQLite 数据库存储数据
通过 `QSqlQuery` 对象可以轻松执行 SQL 插入语句。以下是一个完整的示例:
```cpp
#include <QtSql>
#include <QDebug>
bool insertIntoSQLite(const QString &databasePath, const QString &tableName, int id, const QString &name, int age) {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(databasePath);
if (!db.open()) {
qWarning() << "Failed to connect to database:" << db.lastError().text();
return false;
}
QSqlQuery query;
bool success = query.exec(QString("INSERT INTO %1 (id, name, age) VALUES (%2, '%3', %4)")
.arg(tableName).arg(id).arg(name).arg(age));
if (!success) {
qWarning() << "Failed to execute query:" << query.lastError().text();
}
db.close();
return success;
}
```
上述代码展示了如何向 SQLite 数据库中插入一条记录[^1]。如果需要批量插入多条数据,则可以通过循环调用此函数完成。
---
#### 方法二:使用 MySQL 数据库存储数据
对于 MySQL 数据库,同样可以利用 `QSqlQuery` 来执行插入操作。下面提供了一个具体的例子:
```cpp
#include <QtSql>
#include <QDebug>
bool insertIntoMySQL(const QString &hostName, quint16 port, const QString &dbName,
const QString &userName, const QString &password,
const QString &tableName, int id, const QString &name, int age) {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(hostName);
db.setPort(port);
db.setDatabaseName(dbName);
db.setUserName(userName);
db.setPassword(password);
if (!db.open()) {
qWarning() << "Failed to connect to MySQL database:" << db.lastError().text();
return false;
}
QSqlQuery query;
bool success = query.exec(QString("INSERT INTO %1 (id, name, age) VALUES (%2, '%3', %4)")
.arg(tableName).arg(id).arg(name).arg(age));
if (!success) {
qWarning() << "Failed to execute query:" << query.lastError().text();
}
db.close();
return success;
}
```
这段代码实现了连接到远程 MySQL 数据库并将指定的数据插入目标表的功能[^2]。
---
#### 不使用 QtSQL 模块的情况
如果不希望依赖于 Qt 提供的 `QSql*` 类族,可以直接采用原生的 MySQL C API 进行开发。这种方式更加底层但也更灵活。下面是简单的示例代码片段:
```c
#include <mysql/mysql.h>
#include <stdio.h>
void insertDataUsingMySqlApi(const char *host, unsigned short port, const char *user,
const char *passwd, const char *dbname, MYSQL *conn) {
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, host, user, passwd, dbname, port, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(EXIT_FAILURE);
}
const char *queryStr = "INSERT INTO test_table (id, name, age) VALUES (1, 'John Doe', 30)";
if (mysql_query(conn, queryStr)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(EXIT_FAILURE);
}
printf("Inserted data successfully.\n");
mysql_close(conn);
}
```
该部分演示了如何借助 MySQL 官方提供的 C 接口完成同样的任务[^4]。
---
### 总结
无论是选用轻量级的 SQLite 或者功能强大的 MySQL 数据库,在 QT 应用程序里都可以方便快捷地实施数据存取工作。以上分别给出了针对这两种情况下的具体解决方案及其对应源码展示。
相关问题