用的数据库是sqlite
实现将数据保存到.txt
原本看到MySQL语句有 into outfile,就想找个相应的语句替换掉,但是找了好久没有找到,只找到了在命令行中的导出以及其他的一些方法,在命令行中导出的语句如下:
.output saveName.txt
select * from table;
.output stdout
所以借助QProcess启动外部程序,并交互通信
导出代码如下:
/*
* 使用QProcess类用来启动外部程序cmd.exe并与其通信
* 路径直接为debug路径
* 获得命令,\r\n代替键盘的Enter,没有则不会执行
*/
p=new QProcess();
p->start("cmd.exe");
QString cmd1="sqlite3 db.db \r\n";
QString cmd2=".output "+Address+" \r\n";
QString cmd3="select * from "+table+"; \r\n";
QString cmd4=".output stdout \r\n";
QString cmd=cmd1+cmd2+cmd3+cmd4;
/* 转为char*并写入 */
QByteArray qbarr = cmd.toLatin1();
char *ch = qbarr.data();
qint64 len = cmd.length();
p->write(ch, len);
p->waitForFinished(3000); //避免阻塞,3秒等待时间,重要
p->close();
命令行中导入语句如下:
.separator ","
.import x.txt x_Table
导入代码如下:
p=new QProcess(); // p=new QProcess(this);
p->start("cmd.exe"); //一体式:随主程序的退出而退出
QString cmd1="sqlite3 my.db \r\n";
// ""需要用到转义字符
QString cmd3=".separator \",\" \r\n";
QString cmd4=".import "+fileName+" "+ table+" \r\n";
QString cmd=cmd1+cmd3+cmd4;
/* 转为char*并写入 */
QByteArray qbarr = cmd.toLatin1();
char *ch = qbarr.data();
qint64 len = cmd.length();
p->write(ch, len);
p->waitForFinished(300);
p->close();
感谢大佬的分享,可以点下面的链接
本文参考的代码:https://blog.csdn.net/Hxj_CSDN/article/details/89066330