接上一篇的續寫:
前文提到"最終寫一個demo的my sql工程 發現可以成功運行,但是找不到 創建的數據庫文件 原因再查找"
注意 上面這個問題對應的代碼是如下的:
#include <QDebug> #include <QSqlDatabase> #include <QSqlQuery> #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // db.setDatabaseName("my.db"); db.setHostName("localhost"); db.setPort(3306); db.setDatabaseName("datatest"); db.setUserName("root"); db.setPassword("123456"); if (!db.open()) { qDebug()<<"create database failed"; } else { qDebug()<<"create database success"; } QSqlQuery query(db); query.exec("create table student (id primariy key, name varchar(20))"); query.exec("insert into student values(1, 'wangli')"); query.exec("select * from student"); while (query.next()) { qDebug()<<"id:"<<query.value(0).toInt()<<" name:"<<query.value(1).toString(); } } MainWindow::~MainWindow() { delete ui; }
問題的原因是:
query.exec("create table student (id primariy key, name varchar(20))");
這一行代碼 現在是正確的
之前錯誤的寫法是
query.exec("create table student (id primariy key, name vchar(20))");
這一個小問題,導致我一直以為公司電腦的配置qt開發環境無法使用mysql 數據庫,導致我整整糾結了兩天。
這里記錄我在qt中使用mysql 針對這個問題的分析過程:
<1>首先我寫一個demo 列出安裝的qt5.5.0版本里支持的所有sql drivers,發現里面有MYSQL 竊喜,以為可以像使用sqlite那樣使用mysql
<2>實際上按照網上的操作,先下載mysql 然后迫不及待地寫代碼驗證 發現還是不能用 debug目錄下沒有XXX.db文件生成,糾結了很久,最后發現mysql是沒有XXX.db文件的
<3>然后自己手動編譯mysql 插件 N遍了, 我一直以“DEBUG目錄下是否有XXX.db文件” 作為mysql是否OK 這個是錯誤的,下面繼續說
<4>我懷疑是下載的mysql版本的問題, 位數問題, 安裝路徑有空格和中文的問題 qt對應的版本和位數問題, 最終還看博客,有人提出qt 5.5 mysql的源碼有問題,最終沒結果
<5>最終用家里的電腦,win7系統 一樣的qt版本,按照如下的就好了
這里作一個小總結:
<1>qt中使用mysql數據庫的方法是:qt比較老的版本 需要自己手動編譯mysql 插件 參見我在上一篇博客里的鏈接
<2>我現在用的qt是5.5.0 里面是可以直接使用mysql數據庫的, 直接一句話就是 “將mysql安裝目錄中的libmysql.dll文件拷貝到QT安裝目錄下的bin目錄中就可以了”
我的電腦上就是 將D:\mysql\lib\libmysql.dll 注意 這里D:\mysql目錄是 mysql安裝的目錄 拷貝到 C:\Qt\Qt5.5.0\5.5\mingw492_32\bin 下面去
<3>由於qt中是在字符串里寫sql語句的,很多時候,sql語句出錯也不會有明顯的提示,所以只能 在終端里 測試自己編寫的數據庫語句沒有問題,才能發到代碼里,否則問題很難追查
下面寫一下使用mysql的詳細過程:
<1>到mysql官網下載一個mysql版本
具體就是community->Downloads-> 選擇一個版本 我選的是如下的
下載好了安裝 在D盤創建一個mysql目錄 點擊msi文件,將其安裝到創建的目錄下,這里設置密碼為 123456 端口保持默認 3306 不變 安裝完了如下
然后將lib下面的libmysql.dll拷貝到 C:\Qt\Qt5.5.0\5.5\mingw492_32\bin目錄下
好了,接下來可以在qt中使用mysql數據庫了。
<2> 用法示例:
將mysql路徑加入環境變量 D:\mysql\bin 加入環境變量 運行終端 輸入 mysql -u root -p 輸入密碼 123456 如下
代碼就是上面工程里使用的代碼:
<1>首先用命令行登錄mysql 創建了一個數據庫名字叫做 datatest
<2>代碼里連接到這個數據庫,並且創建了一個表 student 並且插入了一條記錄 代碼里查詢這條記錄 是OK的
<3>在命令行里查詢這條記錄也是OK的 參見上面的截圖
<4>我以為在qt工程的編譯目錄下, 也會生成一個 datatest 這個數據庫文件名 結果一看 什么也沒有
不應該啊 (以我用sqlite的經驗,這個目錄下不用應該有一個datatest的文件嗎? mysql數據庫文件去哪里了?) 參見命令行的最后一條截圖
執行 show variables like '%datadir%'; 找到了路徑在
到此 使用mysql 完成了,注意 這里只是動態的 使用 還有靜態編譯QT程序呢? 靜態編譯中如何使用mysql 下一篇講