QT mysql 连接远端数据库无法打开

需求 Qt生成的 release,经过 windeployqt 之后,放到另外一台机器上,但是打不开网络上面的 mysql 服务器。 解决 检查 mysql 是否安装 其实很简单,因为新机器上面没有 mysql 相关的可执行文件,在机器上安装 mysql 的 client 端即可解决这个问题。 检查源码是否配置正确 另外 qt 源码当中也需要检查 连接 mysql 的配置有没有问题: // 创建一个数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("your_mysql_server_ip"); // 替换为你的 MySQL 服务器 IP 地址 db.setDatabaseName("your_database_name"); db.setUserName("your_username"); db.setPassword("your_password"); 检查 mysql 服务端是否开启了网络帐号 mysql 只有创建了可以网络登陆的帐号,才可以通过网络连接过来。 参考 windows安装mysql client 命令行客户端

<span title='2024-02-20 19:04:00 +0800 CST'>2024-02-20</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;50 words&nbsp;·&nbsp;RamLife

mysql 在 windows 下配置网络帐号

需求 需要在 windows10 64bit 平台配置网络帐号给其他机器远程使用 解决 创建网络账户 workbench 中,先使用本地账户登陆进入界面。 菜单 server -> Users and Privileges 点击 左下角的 Add Account ,配置 Name , Matching 为 %, Password. 点击右下角的 Apply 完成 分配权限 保证左侧创建的 新账号 为选中状态,点击右侧上方的标签 Schema Privileges, 点击右侧的 Add Entry 进入界面 选择 Selected schema, 下拉中选择 需要的数据库, 点击右下的 Ok 左下的 Object Rights 全部勾选,点击右下的 Apply 完成。 创建链接 点击左上方的小房子图标,返回主界面 在原来的本地账户链接的右上,点击 +,进入创建连接的界面。 配置 Name 为 随便什么名字都可以 , Username 为 新创建的用户 点击右下角 ok 完成。 测试 点击刚刚创建的 链接 输入密码 检查 Schemas 标签页,是否有 选择的数据库 右侧输入 select * from xxx 查询是否有数据 参考 MySQL Workbench创建访问用户

<span title='2024-02-20 18:53:00 +0800 CST'>2024-02-20</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;84 words&nbsp;·&nbsp;RamLife

重命名查询后的字段名称

需求 希望查询后的字段名称修改为其他的名称 解决 其实很简单,用 as 就可以了。 select device_id as user_infos_example from user_profile limit 2; 参考 MySQL练习5——将查询后的列重新命名

<span title='2024-01-21 17:34:00 +0800 CST'>2024-01-21</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;16 words&nbsp;·&nbsp;RamLife

sql inner 查询多个表

需求 sql 使用 inner 进行多表查询 解决 INNER JOIN 语法: INNER JOIN 连接两个数据表的用法: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号 INNER JOIN 连接三个数据表的用法: SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号 INNER JOIN 连接四个数据表的用法: SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号 INNER JOIN 连接五个数据表的用法: SELECT * FROM (((表1 INNER JOIN 表2 ON 表1....

<span title='2024-01-21 16:54:00 +0800 CST'>2024-01-21</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;122 words&nbsp;·&nbsp;RamLife

sql 将查询结果转换为其他内容

需求 sql 将查询到的结果转为为其他内容。 比如原来的结果是0,那么输出不通过,是1,输出是通过。 解决 使用 case when then else end 这样的模式。 "SELECT q.`flag_check`, " "(CASE WHEN q.`flag_normal` = 0 THEN '不通过' " "WHEN q.`flag_normal` = 1 THEN '通过' " "ELSE '不通过' END) " "FROM quality AS q" 参考 sql将查到的值(如 0,1,2)转换为相关的文字

<span title='2024-01-21 16:34:00 +0800 CST'>2024-01-21</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;41 words&nbsp;·&nbsp;RamLife

mysql 常用计算和字符处理

需求 mysql 中常用的字符串处理和数值计算? 解决 字符串 Concat: 拼接 Upper,Lower: 大写,小写 Left, Rigth: 返回左边,右边的字符 Length: 长度 Locate: 找出字串 LTrim, RTrim: 去掉左边,右边的空格 SubString: 字串字符 数值计算 加减乘除,都是直接用数学符号就可以了。 Abs: 绝对值 Sin, Cos, Tan: 正弦,余弦,正切 Exp, Sqrt: 指数,平方根 Mod: 余数 Pi: 圆周率 Rand: 随机数 SIGN: 获取正负号, 正1,负-1,零0 日期时间 AddDate, AddTime: 增加日期,时间 CurDate, CurTime, Now: 返回当前日期,时间, 日期和时间 Date, Time, Day, DayOfWeek, Hour, Minute, Month, Second, Year: 日期,时间,天数,星期几,小时,分钟,月,秒,年 DateDiff: 日期差 Date_Add: 灵活的日期运算 Date_Formate: 格式化的日期和时间 比较 = : 判断是否相等,相等1,不相等0 <, >, <=, >= : 正常的大于和小于 <>, !...

<span title='2024-01-04 16:34:00 +0800 CST'>2024-01-04</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;94 words&nbsp;·&nbsp;RamLife

mysql error: Cannot delete or update a parent row: a foreign key constraint fails

需求 使用 mysql 在删除数据表时,报错: =“Cannot delete or update a parent row: a foreign key constraint fails” = 解决 这个问题其实很简单,就是需要删除的表关联到了其他副表,想要删除无非就几种方法: 先把其他相关联的副表中的内容给删除掉,再回头删除主表中的内容 先禁用外键约束,等删除好了,再启用外键约束 SET FOREIGN_KEY_CHECKS=0; -- 禁用外键约束 SET FOREIGN_KEY_CHECKS=1; -- 启用外键约束 外键约束中,删除也选择 CASCADE 级联约束。 参考 mysql 删除数据表报错 表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理 删除数据提示1451:cannot delete or update a parent row:a foreign key constraint fails 删除带外键的表【foreign key constraint fails】报错 Mysql - 删除表时出现: Cannot delete or update a parent row: a foreign key constraint fails

<span title='2023-12-24 17:34:00 +0800 CST'>2023-12-24</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;79 words&nbsp;·&nbsp;RamLife

mysql 多表外键联查视图

需求 使用 mysql,建立了多张表,表之间使用外键进行关联,现在需要通过视图进行多表联查。 多表内容 reagent key_id project type 1 coag gbact itemrange key_id fk_reagent item 1 1 act 2 1 cr 3 1 pf filereportdata key_id fk_item value strip 1 2 1.1 sid01 2 1 2.2 sid02 3 3 3.3 sid03 多表关系 filereportdata.fk_item = itemrange.key_id itemrange.fk_reagent = reagent.key_id 期望结果 strip project type item value sid01 coag gbact cr 1.1 sid02 coag gbact act 2.2 sid03 coag gbact pf 3.3 解决 多表查询 SELECT f....

<span title='2023-12-18 17:34:00 +0800 CST'>2023-12-18</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;156 words&nbsp;·&nbsp;RamLife

QT mysql 里面的日期时间和 QDateTime 转换

需求 qt 使用 mysql 的时候,日期时间格式和 QDateTime 互相转换 解决 QDateTime 转 mysql 时间格式 QDateTime dateTime = QDateTime(QDate(2024, 5, 3), QTime(22, 0, 0)); QString dateTimeString = dateTime.toString("yyyy-MM-dd HH:mm:ss"); // 转换为 MySQL 理解的格式 QString insertQuery = "INSERT INTO version (version_no, version_datetime) VALUES (:version_no, :version_datetime)"; // 执行 SQL 插入语句 // QSqlQuery query; query.prepare(insertQuery); query.bindValue(":version_no", 3); query.bindValue(":version_datetime", dateTimeString); mysql 时间格式转 QDateTime data.time = query.value("analysis_datetime").toDateTime(); 参考 QT读取服务器mysql数据库中日期字段问题

<span title='2023-11-16 10:18:00 +0800 CST'>2023-11-16</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;61 words&nbsp;·&nbsp;RamLife

QT 使用mysql,提示 QSqlDatabasePrivate::database: requested database does not belong to the calling thread.

需求 qt 使用 mysql 的时候,提示: QSqlDatabasePrivate::database: requested database does not belong to the calling thread. 解决 使用 QSqlQuery 的时候,指明数据库连接。 int DataBaseProcess::ConnectDataBase(QSqlDatabase& db, const QString& name) { // if (db_.open()) { // return 1; // } qDebug() << "ConnectDataBase: " << name; if (QSqlDatabase::contains(name))//判断testConnect连接是否存在并连接 { db = QSqlDatabase::database(name); } else //未连接则新建数据库连接 { // QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db = QSqlDatabase::addDatabase("QMYSQL", name); db.setHostName("localhost"); // 设置数据库服务器地址 db.setPort(3306); db.setDatabaseName("ke_db"); // 设置数据库名 db.setUserName("root"); // 设置数据库用户名 db....

<span title='2023-11-15 10:18:00 +0800 CST'>2023-11-15</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;163 words&nbsp;·&nbsp;RamLife