分类: Qt2011-02-18 21:35 1395人阅读 评论(3) 收藏 举报
.
使用Qt做MySQL数据库开发,遇到需要备份、还原数据库的问题。
MySQL中没有提供将数据库备份成.sql文件的SQL语句,而是提供了一个mysqldump.exe工具来完成这个功能。
没有SQL语句,QSqlQuery就用不成了,决定改用QProcess实现。
.
但是在Qt中使用QProcess::execute()方法怎样都导不出数据来,
更郁闷的是在Qt提供的Qt Command Prompt命令行工具里都提示找不到mysqldump.exe程序,
刚开始我怀疑,莫非Qt就是不支持非Windows/System32目录指令之外的指令了?
.
上网搜索"qt 备份Mysql数据库",结果就发现问题的原因了。
这篇"Qt中使用QProcess::execute()时需要注意的问题"
写到,在Windows中的Qt程序使用QProcess::execute()方法,不能使用管道、重定向操作符,要有重定向操作符把内容重定向到文件或者从文件中读取输入的话,则需要设置QProcess对象的标准输入、输出文件为自己需要的文件。
.
一般来说Windows中使用的命令行程序很少有用到管道和重定向的,因为Windows的控制台本身不支持管道和重定向操作。
但这个mysqldump就是个特例,它需要将输出重定向到文件。
但是像QProcess::execute("mysqldump.exe -uUsrName -pUsrPsd DbName > d:/backup.sql")的函数是执行不了的,至少在windows里执行不出来。
.
从Qt4.2开始QProcess提供了setStandardInputFile (), setStandardOutputFile (),  setStandardOutputProcess (). 三个函数来处理Windows中程序遇到管道和重定向问题,用start()方法替代execute()方法,然后使用 setStandardOutputFile ()等方式重定向输出或输入。
.
具体就是,应该将mysqldump操作写成下面这样:
  1. QString Cmd = QString("mysqldump.exe --add-drop-table -u%1 -p%2 test").arg("UsrName","UsrPsd");
  2. QString Path = QString("%1").arg("d://backup.Sql");
  3. QProcess *poc=new QProcess;
  4. poc->setStandardOutputFile(Path);
  5. poc->start(Cmd);
相应的还原数据库操作应该写成这样:
  1. QString Cmd = QString("mysql.exe -u%1 -p%2 test").arg("UsrName","UsrPsd");
  2. QString Path = QString("%1").arg("d://backup.Sql");
  3. QProcess *poc=new QProcess;
  4. poc->setStandardInputFile(Path);
  5. poc->start(Cmd);

Qt中使用QProcess备份和恢复Mysql数据库的更多相关文章

  1. 批处理备份和恢复mysql数据库

    备份 set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%" md "D: ...

  2. 备份和恢复MySQL数据库

    一.备份 1) 备份表mysqldump -uroot -p 库名 表1 > e:\backup.sqlmysqldump -uroot -p 库名 表1 表2 表3 > e:\backu ...

  3. Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁

    Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...

  4. 烂泥:通过binlog恢复mysql数据库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识.这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库. 在使用bin ...

  5. MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库【转载】

    转自 MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库 - _安静 - 博客园http://www.cnblogs.com/xionghui/archive/2012/ ...

  6. Java在线备份和还原MySQL数据库。

    2018年6月29日14:00:48 阅读数:1534 今天整了整整一整天,终于使用Java在线备份和还原MySQL数据库了,哎,备份倒是很快,就是在还原的时候遇到了一个问题,也不报错,结果将sql语 ...

  7. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

  8. 电脑重装系统后如何恢复Mysql数据库

    电脑重装系统后如何恢复Mysql数据库 一.[设置mysql的path]

  9. 电脑重装系统后如何恢复 Mysql 数据库

    电脑重装系统后如何恢复 Mysql 数据库 一.[设置mysql的path] 比如:我的mysql在:D:\DataBase\mysql-5.7.13-winx64,可以在环境变量中重新新建一个环境变 ...

随机推荐

  1. MySQL 存储过程删除大表

    1.权限问题 alter routine 编辑或删除存储过程 create routine 建立存储过程 execute 创建存储过程 2.存储过程相关的一些命令 show procedure sta ...

  2. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.4

    If $\dim \scrH=3$, then $\dim \otimes^3\scrH =27$, $\dim \wedge^3\scrH =1$ and $\dim \vee^3\scrH =10 ...

  3. <转>SpringMVC与Struts2 比较总结

    原链接:http://blog.csdn.net/chenleixing/article/details/44570681 个人整理: 1.级别不同:SpringMVC :方法  Struts是 类级 ...

  4. ajax跨域解决方案(服务端仅限java)

    楼主前端知识菜鸟,高手勿喷,在此记录工作中遇到的问题及解决方案,大神请滤过 方法1.jsonp(js客户端ajax请求参数方式设置) 方法2.服务端接口设置: HttpServletResponse ...

  5. activemq 一个不错的ppt

    http://people.apache.org/~jstrachan/talks/ActiveMQ-Dublin07.pdf

  6. 5个最优秀的Java和C#代码转换工具

    http://www.codeceo.com/article/5-java-csharp-convert-tools.html 毋庸置疑,Java是一门最受欢迎而且使用最广泛的编程语言,目前有超过9百 ...

  7. REST和SOAP

    转自:http://blog.csdn.net/smstong/article/details/5312136 我感觉维基百科说的REST解释的就听明白的,摘录下来: 含状态传输(英文:Represe ...

  8. Vijos1404 遭遇战 最短路,dijkstra,堆

    P1404遭遇战 标签:[显示标签]     背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分 ...

  9. yum cdh4

    cdh4 install for Centos6那个最美的年代,最好的时光,一路梦想,一路流泪,流的不会是懦弱的泪,而是对奋斗的寄于;1,repo配置>>>/etc/yum.repo ...

  10. CSS样式表优先级

    使用CSS样式表一共有2种方式:内部和外部,其中内部分为行内样式和嵌入式,外部分为导入式和链接式. 如果需要在不同的方式中设定同一个属性的时候,样式的优先级别就出现了. 测试代码如下: red.css ...