1. 程式人生 > >qt4.7解決mysql無法連線問題(這個方法是錯誤的)

qt4.7解決mysql無法連線問題(這個方法是錯誤的)

0起因

做題我開始做我們學校的資料庫實習報告。報告上要求用sqlserver。不過我是一個開源的支持者,所以我選擇了用mysql+qt開發我的程式。

我在書《c++ gui qt4 程式設計(第二版)》中找到了有關資料庫開發的資料。首先這篇文章的解決方法並不重要,重要的是我在這次解決問題中學到了什麼。

書中給的意思是連線資料庫要這樣寫。

bool createConnection()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("local");
    db.setDatabaseName("mytest");
    db.setUserName("root");
    db.setPassword("123456");
    if(!db.open())
    {
        printf("error\n");
    }
    else
    {
        printf("yes\n");
    }
    return true;
}

1問題


但是執行起來問題就來了。編譯執行後給出的錯誤資訊是
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC

從錯誤資訊中可以發現其實是沒有mysql的資料庫驅動造成的。但是書中說qt實際上是帶有資料庫驅動程式的。只是由於開源許可證的原因,不能提供所有資料庫的驅動程式,比如sqlserver。

2我的解決方法

於是我直接把錯誤資訊輸入百度開始查詢我的解決方案,在這裡我是直接搜尋錯誤資訊,連資訊到底是什麼都沒有看全。有幾個解決的非常好的帖子

http://blog.sina.com.cn/s/blog_74a7e56e01017s64.html
他們都說要自己編譯驅動程式。重新安裝mysql。我沒有試上面的方法到底行不行。因為自己編譯驅動程式是一個非常麻煩的事情,而且還不一定會發生什麼其他的事情。當然現在看來我在搜尋帖子的時候也浪費的很多時間。我在思考,qt和mysql同時時開源的,怎麼可能不提供mysql的驅動程式呢?

所以我仔細看了一下錯誤資訊發現第二行錯誤資訊已經給我們解決方法了

 available drivers: QSQLITE QODBC3 QODBC
這個不就是說qt自帶的驅動程式是這個嗎?。所以要把我們程式碼改一下
bool createConnection()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE")
    db.setHostName("local");
    db.setDatabaseName("mytest");
    db.setUserName("root");
    db.setPassword("123456");
    if(!db.open())
    {
        printf("error\n");
    }
    else
    {
        printf("yes\n");
    }
    return true;
}
執行正常

3解決問題的思考

以前在發生問題的時候我總是直接按照錯誤提示去百度解決方法。根本沒有看清楚資訊到底是什麼,也沒有自己思考解決方法。所以有以下總結

1書上的東西不一定對,特別是程式碼,因為軟體每個版本都有差異

2帖子上的解決方法不一定是最好的。雖然他可能解決問題

3不要看到錯誤直接百度,要確保自己理解所有錯誤資訊。

後記

這個方法不能解決問題。因為僅僅是連線上資料庫,並不能進行查詢,因為資料庫驅動不對。