赞
踩
1.在QT5.10的环境下连接mysql,完成代码部分后直接运行,运行成功,但提示
“QSqlQuery::exec: database not open
database open failed”
2.完成数据库和QT的连接,但是提示“Error: Fail to insert . QSqlError(“1366”, “QMYSQL: Unable to execute query”, “Incorrect string value: ‘\xEF\xBF\xBD\xEF\xBF\xBD…’ for column ‘Name’ at row 1”)”
文末附上解决问题后的代码总结
问题1:
确保QSqlDatabase::addDatabase(“QMYSQL”, “testConnect”);部分代码正确,如果第二个参数未填写会导致上述问题发生
问题2
起初以为是数据库字段名错误引起,更改字段名称后任然错误。最后发现是中文编码问题,插入的数据改为英文字符
就没这个问题了。或者添加database.exec("alter table Student convert to character set utf8");
在创建数据库之后
另外,如果QT提示“fail to connect mysql: "Driver not loaded Driver not loaded”表示驱动错误,按照网上查询的办法,将libmysql.lib和libmysql.dll放到C:\Qt\Qt5.10.0\5.10.0\msvc2015_64\bin文件夹下,将qsqlmysqld.dll和 qsqlmysql.d放到C:\Qt\Qt5.10.0\5.10.0\msvc2015_64\plugins\sqldrivers目录下,一般可以解决。
总体上,QT使用数据库创建表并插入内容就三步:
1.QT和数据库进行连接
QSqlDatabase db;
if (QSqlDatabase::contains("testConnect"))//判断testConnect连接是否存在并连接
{
db = QSqlDatabase::database("testConnect");
}
else
{
db = QSqlDatabase::addDatabase("QMYSQL", "testConnect");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("root");
}
2.创建一个新的数据库
QString querystring; db = QSqlDatabase::database("testConnect"); querystring = "CREATE DATABASE IF NOT EXISTS student_info"; db.exec(querystring); db.setDatabaseName("student_info"); if (!db.open()) { qDebug() << "database open failed"; return; } querystring = "CREATE TABLE IF NOT EXISTS student_info.Student\ (\ Name varchar(20),\ NO int(20),\ Sex varchar(20),\ Tell varchar(20),\ Address varchar(30), \ Hobbies varchar(30)\ )"; db.exec(querystring);//执行创建数据表语句
3.插入数据
db.exec("alter table Student convert to character set utf8");
QSqlQuery query(db);
QString strinsert;
strinsert = "insert into Student values('王五', 2022050479, '男','145678','北京市朝阳区','足球')";
if (!query.exec(strinsert))
{
qDebug() << "Error: Fail to insert ." << query.lastError();
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。