当前位置:Gxlcms > 数据库问题 > Qt-数据库操作

Qt-数据库操作

时间:2021-07-01 10:21:17 帮助过:25人阅读

(2)添加MySql数据库

1     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

(3)连接数据库

1     db.setHostName("127.0.0.1");  //数据库服务器IP
2     db.setUserName("root");    //数据库用户名
3     db.setPassword("123456");  //密码
4     db.setDatabaseName("test");  //使用哪个数据库

(4)打开数据库

1     if (db.open() == false) {
2         QMessageBox::warning(this, "错误", db.lastError().text());
3         return;
4     }

(5)执行sql语句

1     //操作sql语句
2     QSqlQuery query;
3     query.exec("create table student(id int primary key, name varchar(255), age int, score int);");

执行的时候可能会报以下错误:

技术图片

这时,我们将MySql的安装路径下的文件拷贝到Qt的安装目录下,关闭Qt,再次打开执行就不会报错了:

技术图片

上述步骤的完整代码:

技术图片
 1 Widget::Widget(QWidget *parent) :
 2     QWidget(parent),
 3     ui(new Ui::Widget)
 4 {
 5     ui->setupUi(this);
 6 
 7     //打印qt支持的数据库驱动
 8     qDebug() << QSqlDatabase::drivers();
 9 
10     //添加MySql数据库
11     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
12     //连接数据库
13     db.setHostName("127.0.0.1");  //数据库服务器IP
14     db.setUserName("root");    //数据库用户名
15     db.setPassword("123456");  //密码
16     db.setDatabaseName("test");  //使用哪个数据库
17     //打开数据库
18     if (db.open() == false) {
19         QMessageBox::warning(this, "错误", db.lastError().text());
20         return;
21     }
22     //操作sql语句
23     QSqlQuery query;
24     query.exec("create table student(id int primary key, name varchar(255), age int, score int);");
25 }
View Code

运行测试:

技术图片

2、使用方式2

在添加MySql时,我们给数据库连接一个名字,addDatabase函数的第二个参数,这样可以为一个数据库建立多个连接。

1 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");

通过这种方式,我们使用QSqlQuery执行MySql语句时,必须指定数据库名字:

1 1 //操作sql语句
2 2     QSqlQuery query(db);
3 3     query.exec("insert into student(id, name, age, score) values(1, ‘mike‘, 18, 59);");

3、批量插入

(1)方式一:

 1     //odbc风格
 2     //预处理语句
 3     query.prepare("insert into student(name, age, score) values(?, ?, ?);");
 4     // 给字段设置内容
 5     QVariantList nameList;
 6     nameList << "xiaoming" << "xiaokong" << "xiaojiang";
 7     QVariantList ageList;
 8     ageList << 22 << 21 << 24;
 9     QVariantList scoreList;
10     scoreList << 89 << 99 << 78;
11     //给字段绑定相应的值,必须按顺序绑定
12     query.addBindValue(nameList);
13     query.addBindValue(ageList);
14     query.addBindValue(scoreList);
15     //执行预处理命令
16     query.execBatch();

QSqlQuery::prepare()函数对这条 SQL 语句进行预处理,问号 ? 相当于占位符,预示着以后我们可以使用实际数据替换这些位置。

QSqlQuery::addBindValue()我们将实际数据绑定到这个预处理的 SQL 语句上。

QSqlQuery::execBatch()批量执行 SQL,之后结束该对象。

(2)方式二:

 1     //oracle风格:占位符 + 自定义名字
 2     query.prepare("insert into student(name, age, score) values(:name, :age, :score)");
 3     //给字段设置内容
 4     QVariantList nameList;
 5     nameList << "xiaoa" << "xiaob" << "xiaoc";
 6     QVariantList ageList;
 7     ageList << 21 << 19 << 24;
 8     QVariantList scoreList;
 9     scoreList << 77 << 66 << 70;
10     //给字段绑定对应的值,不需要指定顺序
11     query.bindValue(":name", nameList);
12     query.bindValue(":score", scoreList);
13     query.bindValue(":age", ageList);
14     //执行预处理命令
15     query.execBatch();

推荐使用方式二。

后续还需继续补充。

Qt-数据库操作

标签:sql 语句   spl   dbi   ecb   variant   psql   img   命令   打开   

人气教程排行