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!";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章