简述:
CSV,Comma Separated Value(逗号分隔值),通常都是纯文本文件,以行为单位,每行记录多项数据,每项数据用逗号 来分隔(标准英文逗号)。
本文主要介绍将数据库的表导出为CSV文件,支持中文。
系统:Qt + linux
1、写入CSV文件
/**
* @brief creatCSVFile()
* 创建CSV文件
* @return
*/
void creatCSVFile()
{
QString tablehead;
tablehead = "StudentName, School, Sex, StudeId, Class, Grade, Hobby, \n";
readAllDataFromSqlWriteToCSV("tb_Student","/home/tb_Student.csv",tablehead);
}
/**
* @brief readAllDataFromSqlWriteToCSV
* 将数据库xx表的所有数据写入CSV文件
* @return
*/
void readAllDataFromSqlWriteToCSV(const QString &tableName, const QString &csvFileName, QString tablehead)
{
if(csvFileName.isEmpty())
return;
//打开.csv文件
QFile csvFile(csvFileName);
if(!csvFile.open(QIODevice::WriteOnly))
{
qDebug()<<QString("Cannot open %1 for writing").arg(csvFile.fileName());
return;
}
QSqlQuery query(db);
QString sql;
QString strString;
QByteArray head = tablehead.toLocal8Bit();
QByteArray rowData;
QTextCodec *code = QTextCodec::codecForName("GB2312"); //解决中文乱码问题
QTextCodec::setCodecForTr(code);
QTextCodec::setCodecForLocale(code);
QTextCodec::setCodecForCStrings(code);
csvFile.write(head.data());
sql ="select * from " + tableName;
query.prepare(sql);
if(query.exec(sql))
{
QSqlRecord sqlRecord = query.record();
while(query.next())
{
strString.clear();
rowData.clear();
//sqlRecord.count():获取列
for(int i = 0;i < sqlRecord.count(); i++)
{
QString value = query.value(i).toString();
if(value.contains(","))
{
value.replace(",",";");
strString += value + ", ";
}
else
{
strString += query.valu