当前位置:   article > 正文

QT5.10打开Mysql失败,数据库insert数据失败_failed to insert record qsqlerror("", "", "")

failed to insert record qsqlerror("", "", "")

问题描述

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");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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);//执行创建数据表语句
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/699795
推荐阅读
相关标签
  

闽ICP备14008679号