在Qt中使用QProcess備份和恢復Mysql數據庫
使用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操作寫成下面這樣:
- QString Cmd = QString("mysqldump.exe --add-drop-table -u%1 -p%2 test").arg("UsrName","UsrPsd");
- QString Path = QString("%1").arg("d://backup.Sql");
- QProcess *poc=new QProcess;
- poc->setStandardOutputFile(Path);
- poc->start(Cmd);
- QString Cmd = QString("mysqldump.exe --add-drop-table -u%1 -p%2 test").arg("UsrName","UsrPsd");
- QString Path = QString("%1").arg("d://backup.Sql");
- QProcess *poc=new QProcess;
- poc->setStandardOutputFile(Path);
- poc->start(Cmd);
相應的還原數據庫操作應該寫成這樣:
- QString Cmd = QString("mysql.exe -u%1 -p%2 test").arg("UsrName","UsrPsd");
- QString Path = QString("%1").arg("d://backup.Sql");
- QProcess *poc=new QProcess;
- poc->setStandardInputFile(Path);
- poc->start(Cmd);
小結:在Qt中使用QProcess備份和恢復Mysql數據庫的內容介紹完了,希望通過本文的學習能對你有所幫助!