分类: 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. 【转】1.5 起步 - 初次运行 Git 前的配置

    原文网址:http://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%88%9D%E6%AC%A1%E8%BF%90%E8%A1%8C-Git-%E5%8 ...

  2. CF GYM 100703G Game of numbers

    题意:给n个数,一开始基数为0,用这n个数依次对基数做加法或减法,使基数不超过k且不小于0,输出最远能运算到的数字个数,输出策略. 解法:dp.dp[i][j]表示做完第i个数字的运算后结果为j的可能 ...

  3. HDU 5965 Gym Class 贪心+toposort

    分析:就是给一些拓补关系,然后求最大分数,所以贪心,大的越靠前越好,小的越靠后越好 剩下的就是toposort,当然由于贪心,所以使用优先队列 #include <iostream> #i ...

  4. HDU 5700 区间交 线段树暴力

    枚举左端点,然后在线段树内,更新所有左边界小于当前点的区间的右端点,然后查线段树二分查第k大就好 #include <cstdio> #include <cstring> #i ...

  5. VirtualBox Headless启动虚拟机

    习惯了在Windows上来学习和娱乐,所以不能切换到Linux系统. 为了Linux编程,我首先尝试了wubi在Windows上安装双系统,但是发现本来启动很快的Windows8安装了双系统之后,系统 ...

  6. 房租管理小软件(四):对linq的使用

    1.对LInq的封装如下: private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMap ...

  7. NOIP2012 Vigenère 密码

    1.Vigenère 密码 (vigenere.cpp/c/pas) [问题描述] 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码.V ...

  8. Apache启动是出现the requested operation has failed

    出现的原因: 原因一:80端口占用例如IIS,另外就是迅雷. 原因二:软件冲突装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp属性->高级->WINS ...

  9. Java注解处理器使用详解

    在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor).在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么:然后,我将一步一步实 ...

  10. js为表格添加行和列

    <table id="studentTable" align="center" border="1px;" cellpadding=& ...