詳解Ubuntu10.10下Qt連接Mysql數據庫

轉載自:http://mobile.51cto.com/symbian-273262.htm

 

詳解Ubuntu10.10下Qt連接Mysql數據庫是本文要介紹的內容,很詳細的步驟,我們先來看內容。

第一步:安裝qt開發環境

  1. xhy@xhy-desktop:~$sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer 

第二步:安裝mysql開發環境

  1. xhy@xhy-desktop:~$sudo apt-get install mysql-server mysql-client  
  2. xhy@xhy-desktop:~$sudo apt-get install libmysqlclient15-dev   
  3. xhy@xhy-desktop:~$sudo apt-get install libqt4-sql-mysql  
  4. xhy@xhy-desktop:~$sudo /etc/init.d/mysql restart 

第三步:給普通用戶授權操作數據庫

  1. xhy@xhy-desktop:~$ mysql -u root -p      (root登錄數據庫)  
  2. mysql> create database mydb;                     (創建一個數據庫)  
  3. mysql> grant all privileges on *.* to username@localhost identified by 'password';   
  4. mysql> quit; 

給特定用戶分配數據操作權限的格式是:

grant 權限1,權限2,...權限n on 數據庫名稱.表名稱 to 用戶名@用戶ip地址 identified by '密碼';

第四步:測試環境

  1. #include <QApplication> 
  2. #include <QtSql> 
  3. #include <QTableView> 
  4. #include <iostream> 
  5.  
  6. using namespace std;  
  7.  
  8. int main(int argc, char *argv[])   
  9. {  
  10. QApplication app(argc, argv);  
  11.  
  12. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  
  13. db.setHostName("localhost");  
  14. db.setDatabaseName("mydb");  
  15. db.setUserName("username");  
  16. db.setPassword("password");  
  17. db.open();  
  18.  
  19. QSqlQuery query;  
  20. query.exec("create table hello(id bigint not null auto_increment,name varchar(255),age bigint,primary key (id))");  
  21. /*query.exec("insert into hello(name, age) values('xiaoxi', 18)");  
  22. query.exec("insert into hello(name, age) values('xiaonan', 19)");  
  23. query.exec("insert into hello(name, age) values('xiaobei', 20)");  
  24. query.exec("insert into hello(name, age) values('xiaodong', 21)");*/  
  25.  
  26. //ODBC風格  
  27. query.prepare("insert into hello(name, age)" "values(?, ?)");  
  28. query.addBindValue("xiaoxi");  
  29. query.addBindValue(18);  
  30. query.exec();  
  31. query.addBindValue("xiaonan");  
  32. query.addBindValue(19);  
  33. query.exec();  
  34. query.addBindValue("xiaobei");  
  35. query.addBindValue(20);  
  36. query.exec();  
  37. query.addBindValue("xiaodong");  
  38. query.addBindValue(21);  
  39. query.exec();  
  40.  
  41. //Oracle風格  
  42. /*query.prepare("insert into hello(name, age) values(:name, :age)");  
  43. query.bindValue(":name", "xiaoxi");  
  44. query.bindValue(":age", 18);  
  45. query.exec();  
  46. query.bindValue(":name", "xiaonan");  
  47. query.bindValue(":age", 19);  
  48. query.exec();  
  49. query.bindValue(":name", "xiaobei");  
  50. query.bindValue(":age", 20);  
  51. query.exec();  
  52. query.bindValue(":name", "xiaodong");  
  53. query.bindValue(":age", 21);  
  54. query.exec();*/  
  55.  
  56. QSqlQueryModel *model = new QSqlQueryModel;  
  57. model->setQuery("select * from hello");  
  58. model->setHeaderData(0, Qt::Horizontal, "id");  
  59. model->setHeaderData(1, Qt::Horizontal, "name");  
  60. model->setHeaderData(2, Qt::Horizontal, "age");  
  61. QTableView *view = new QTableView;  
  62. view->setWindowTitle("QSqlQueryModel");  
  63. view->setModel(model);  
  64. view->show();  
  65.  
  66. /*QSqlTableModel *model = new QSqlTableModel;  
  67. model->setTable("hello");  
  68. model->select();  
  69. for (int i = 0; i < model->rowCount(); ++i)   
  70. {  
  71. QSqlRecord record = model->record(i);  
  72. int id = record.value(0).toInt();  
  73. QString name = record.value(1).toString();  
  74. int age = record.value(2).toInt();  
  75. cout << id << " " << qPrintable(name) << " " << age << endl;  
  76. }*/  
  77. db.close();  
  78. return app.exec();  
  79. }  

編譯:

  1. xhy@xhy-desktop:~$ qmake -project  
  2. xhy@xhy-desktop:~$ qmake 

一定別忘了在工程的.pro文件里加上下面一行:

  1. QT += sql  
  2. xhy@xhy-desktop:~$make  
  3. xhy@xhy-desktop:~$./mysql 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章