Qt5存储大文件到Mysql

1.首先初始化Mysql环境,设置Mysql默认单表大小

Mysql数据库设置单表默认存储大小以存入大文件

2.创建表

CREATE TABLE filedata(
	id     INT     PRIMARY KEY AUTO_INCREMENT,
	filename    VARCHAR(255),
	data     MEDIUMBLOB
);

3.Qt代码

3.1 Qt连接数据库

	QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //添加数据库名称,这里写QMYSQL
	db.setHostName("127.0.0.1"); //设置数据库主机名
	db.setDatabaseName("test"); //设置数据库名
	db.setUserName("root"); //设置数据库用户名
	db.setPassword("1234"); //设置数据库密码
	if (!db.open()) {
		qDebug() << "Error: Failed to connect database." << db.lastError();
	} else {
		qDebug() << "Succeed to connect database.";
	}

3.2写入文件到Mysql

void WriteDataToMysql()
{
	//选择要写入的文件
	QString f = QFileDialog::getOpenFileName();

	//转换为字节数组
	QByteArray mapData;
	QFile file(f);
	file.open(QIODevice::ReadOnly);
	mapData = file.readAll();
	file.close();

	//插入数据
	QSqlQuery query;
	query.prepare("INSERT INTO filedata values(:id,:name,:data)");
	query.bindValue(":id", 1);
	query.bindValue(":name", "testName");
	query.bindValue(":data", mapData);
	if (!query.exec()) {
		qDebug() << query.lastError();
	} else {
		qDebug() << "inserted data successfully!";
	}
}

3.3 从Mysql读取文件到本地

void Widget::readDataFromMysql()
{

	QSqlQuery readquery;

	QByteArray databa;
	if (readquery.exec("select data from filedata where name = 'testName'")) {
		QSqlRecord myrecord = readquery.record();

		if (readquery.next()) {
			databa = readquery.value(myrecord.indexOf("data")).toByteArray(); //读取二进制对象
		}
	}
	QFile mybfile("b.mov");		//写到本地文件,存什么后缀文件名就写什么
	mybfile.open(QIODevice::WriteOnly);
	mybfile.write(databa);
	mybfile.close();
	qDebug() << "write data successfully!";
}
  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要将MySQL链表保存到本地Excel,可以使用Qt的QSqlQuery类来查询数据库,并将结果保存为CSV格式的文件。然后,可以使用QtQTextStream类读取CSV文件,并将数据保存到本地Excel文件。 下面是一个简单的示例代码: ```cpp #include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlRecord> #include <QFile> #include <QTextStream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 连接MySQL数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("myusername"); db.setPassword("mypassword"); if (!db.open()) { qDebug() << "Failed to connect to database."; return 1; } // 查询数据 QSqlQuery query("SELECT * FROM mytable"); QSqlRecord record = query.record(); // 保存为CSV文件 QFile file("output.csv"); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); // 写入表头 for (int i = 0; i < record.count(); i++) { out << record.fieldName(i) << ","; } out << "\n"; // 写入数据 while (query.next()) { for (int i = 0; i < record.count(); i++) { out << query.value(i).toString() << ","; } out << "\n"; } file.close(); } // 保存为Excel文件 QFile csvFile("output.csv"); if (csvFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&csvFile); QFile excelFile("output.xlsx"); if (excelFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { QTextStream out(&excelFile); // 写入BOM out.setCodec("UTF-8"); out << "\xEF\xBB\xBF"; // 写入数据 while (!in.atEnd()) { QString line = in.readLine(); QStringList fields = line.split(","); for (int i = 0; i < fields.count(); i++) { QString field = fields[i]; // 处理特殊字符 field.replace("\"", "\"\""); if (field.contains(",") || field.contains("\"") || field.contains("\n")) { field = "\"" + field + "\""; } out << field; if (i < fields.count() - 1) { out << ","; } } out << "\n"; } excelFile.close(); } csvFile.close(); } // 关闭数据库连接 db.close(); return 0; } ``` 这个示例代码将MySQL数据库的数据保存为CSV文件,然后将CSV文件保存为Excel文件。在保存为Excel文件时,需要注意特殊字符的处理,例如逗号、双引号和换行符等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值