1. 程式人生 > >Qt中使用QProcess備份和恢復Mysql資料庫

Qt中使用QProcess備份和恢復Mysql資料庫

轉載自:http://blog.csdn.net/lynfam/article/details/6194275



使用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()時需要注意的問題
" (原文地址  http://www.qtcn.org/blog/article.php?itemid-629-type-blog.html) 寫到,在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("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);