QT支持多种数据库的读写,因为本身安装包中就有数据库驱动,但是没有现成的oracle数据库读写的驱动需要手动编译才可以。有已经编译好的64位的oci驱动dll。
1.下载驱动
QT64位Oracle读写DLL下载
把下载好的驱动dll放到QT数据库驱动文件夹下面:C:\Qt\Qt5.10.0\5.10.0\msvc2015_64\plugins\sqldrivers
2.操作数据库
1.调用静态函数,创建数据库链接;
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI", "aewes");
2.链接数据库:
db.setHostName(strHost);//主机IP
db.setUserName(strUserName);//用户名
db.setPassword(strPassword);//密码
db.setPort(port);//端口号
db.setDatabaseName(strDbName);//数据库名
if (!db.open()) {
qDebug() << QStringLiteral("++++++++++++++++++++++++++++++++++数据库连接失败!");
}
3.插入数据:
QSqlDatabase db = QSqlDatabase::database("aewes");
QSqlQuery query(db);
//想要插入多条数据,必须多次运行insert into语句
query.prepare("insert into HYMP_TEST values (:id ,:name,:age)");
query.bindValue(":id", 1);
query.bindValue(":name", QStringLiteral("张三"));
query.bindValue(":age", 26);
query.exec();
db.commit();
4.删除数据:
QSqlDatabase db = QSqlDatabase::database("aewes");
QSqlQuery query(db);
query.prepare("delete from HYMP_TEST where id = :id");
query.bindValue(":id", 1);
query.exec();
db.commit();
5.更新数据:
QSqlDatabase db = QSqlDatabase::database("aewes");
QSqlQuery query(db);
query.prepare("update HYMP_TEST set name = :name , age = :age where id = :id");
query.bindValue(":name", QStringLiteral("李四"));
query.bindValue(":age", 89);
query.bindValue(":id", 1);
query.exec();
db.commit();
6.查询数据:
QSqlDatabase db = QSqlDatabase::database("aewes");
QSqlQuery query(db);
query.exec("select * from HYMP_TEST");
QStringList list;
int rows = query.numRowsAffected();
int fieldNum = query.record().count();//字段数量
qDebug() << QStringLiteral("查询到的字段数:") << fieldNum;
while (query.next()) {
list << query.record().value(0).toString();
for (int i = 0; i < fieldNum; i++) {
qDebug() << query.record().value(i).toString();
}
}
QSqlDatabase db = QSqlDatabase::database("aewes");
QSqlQuery query2(db);
query2.prepare("select * from HYMP_TEST a where a.id = :id");
query2.bindValue(":id", 2);
query2.exec();
QSqlRecord rec = query2.record();
int idxName = rec.indexOf("name");
while (query2.next()) {
qDebug() << query2.record().value(idxName).toString();
}