2009-10-08 54 views
0

在這裏創建數據庫時遇到麻煩的新手。 下面的代碼編譯好了,但沒有創建數據庫,我找不到任何sqlite文件。在QT中創建數據庫

#include "makeDB.h" 
#include <iostream> 
#include <QString> 
#include <QtSql> 

void makeDB(QString dbName) { 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setHostName("localHost"); 
    db.setDatabaseName(dbName); 
    db.setUserName("logger"); 
    db.setPassword("logger"); 
} 

#include <QtGui/QApplication> 
#include <QString> 
#include <QtSql> 
#include "mainwindow.h" 
#include "makeDB.h" 
#include "createTable.h" 
#include "ui_mainwindow.h" 


int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    makeDB("log1"); 

    createTable(); 

    return a.exec(); 
} 

我在做什麼錯在這裏?謝謝! Waynew 編輯/刪除

回答

3

我們看不到你createTable()做了什麼,你從來沒有調用代碼db.open()大部分QT數據庫和SQL調用成功返回bool並有一個lastError()功能,同時爲QSqlDatabaseQSqlQuery調用。檢查那些合適的呼叫,即db.open()query.exec()返回false。

例如

bool makeDB(QString dbName) { 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setHostName("localHost"); 
    db.setDatabaseName(dbName); 
    bool result = db.open(); 
    if (result) 
    { 
    //do more processing 
    } 
    else 
    { 
    qDebug() << db.lastError().text() 
    } 
    return result; 
} 

此外,我不認爲SqlLite支持任何一種認證this似乎表明您可以通過授權從SqlLite的創造者的延伸保護您的分貝。

至於實際的表的創建應該被執行,看起來像這樣一些SQL:

CREATE TABLE (x int, y varchar); 

取決於你真正想要的列。

This是相應的文檔。