一. 内容简介
用mysql创建900列的数据表,使用QT对该数据表实现基本数据操作。
二. 软件环境
2.1QT 5.14.1
新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。
QT编译器采用的是MSVC2017 64bit。
链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234
2.2Mysql
mysql Ver 8.0.31 for Win64 on x86_64 (MySQL Community Server - GPL)
2.3SQLyog
三.主要流程
3.1mysql创建多列大表
3.2QT连接mysql
3.3QT操作数据库
四.具体步骤
4.1mysql创建多列大表
先贴代码块,主要用的就是存储过程,之后是详细过程
# 创建outp_1数据表,
CREATE TABLE outp_1(Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
# 存储过程添加字段列
DELIMITER //
CREATE PROCEDURE outp_1 ()
BEGIN
SET @bbb=1;
//此处设置有多少列
WHILE @bbb<901 DO
SET @sql = CONCAT('ALTER TABLE outp_1
ADD COLUMN `',@bbb,'` DOUBLE');
PREPARE statement_user_insert FROM @sql;
EXECUTE statement_user_insert;
DEALLOCATE PREPARE statement_user_insert;
SET @bbb = @bbb+1;
END WHILE;
END
//
DELIMITER ;
CALL outp_1 ();
//查询是否创建成功
SELECT * FROM outp_1;
打开mysql命令行
mysql -u root -p
进入以后需要指定使用的数据库
use database
随后可以将代码全部粘贴进去运行,运行过后以后,要将相应的存储过程删除,相同的存储过程只能创建一次,重复创建会报错,这个好像是删除存储过程的。
DROP PROCEDURE ShowStuScore;
还有就这个代码可以直接在sqlyog中运行了,上边那个方式是运行不了的话,可以尝试一下,我一台可以,另外一台不可以
4.2QT连接mysql
这里我直接连接报错了,所以采用了odbc连接的,附上odbc下载链接https://dev.mysql.com/downloads/connector/odbc/
安装完成以后
点击添加
选择这个点完成,里面两个都可以,Unicode driver 版本提供了更多字符集的支持,也就是提供了多语言的支持。而ANSI driver 版本是只针对有限的字符集的范围。,
然后测试,应该就连接成功了
然后在pro文件中添加,在头文件添加
//pro文件
QT += sql
//头文件
#include <QSqlDatabase>
随后连接数据库
//初始化变量
//这两个添加到头文件
QSqlDatabase db;
QSqlQuery query;
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("mysql");
db.setUserName("root");
db.setPassword("root");
if (!db.open()) {
qDebug("Sql connect failed.");
qDebug() << db.lastError().text();
} else {
qDebug("Sql connected.");
}
即可连接成功
4.3QT操作多列大表
往多列大表中添加数据
// outhf数据库添加空的字段
query.prepare("INSERT INTO outhf () VALUES ()");
query.exec();
QString sq_hf="";
//存储hf表数据
for (int i=1;i<=900;i++) {
// outhf
q_hf=QString("UPDATE outhf SET `%1`=%2 WHERE Id=%3").arg(i-0).arg(matrix1_hf[i]).arg(Id);
query.exec(sq_hf);
counthf++;
}
查询数据,并读取
QString sq_hf="";
sq_hf=QString("select * from outhf where Id=%1").arg(Id);
query.exec(sq_hf);
while(query.next())
{
if(query.value(0).toString().isNull()){
qDebug() << "没有查到数据";
}else{
qDebug() << "查到数据";
}
qDebug() << "Id:" << query.value(0).toString();
qDebug() << "Id:" << query.value(0).toString()
<< "R:" << query.value(1).toString() << " l:" << query.value(2).toString()
<< "E2:" << query.value(3).toString() << "n0:" << query.value(4).toString()
<< "E:" << query.value(5).toString() << " tb:" << query.value(6).toString()
<< "M:" << query.value(7).toString() << " N:" << query.value(8).toString();
}