2013-05-30 42 views
0

我想插入2 QString到我的數據庫QString時,SQLite數據庫,但我面對這樣的錯誤:我應該如何插入QT

QSqlError(1, "Unable to execute statement", "table login_t already exists") 

和我的數據庫是空的我的代碼是:

void School::set_db(QString usern, QString pass) 
{ 
    QSqlDatabase db1 =QSqlDatabase::addDatabase("QSQLITE"); 
    db1.setDatabaseName("school1.db"); 
    bool isOpen = db1.open() ; 
    QSqlQuery q(db1); 
    QString queryString = "INSERT INTO login_t (user, pass) VALUES (?,?)"; 
    q(queryString); 
    q.addBindValue(usern); 
    q.addBindValue(pass); 
    q.exec(); 
} 
set_db("user1" , "pass1"); 

我以前製作我的數據庫和表格。

回答

0

根據您的錯誤table login_t already exists的消息,我可以告訴你,你嘗試創建表login_t,而這個表已經存在。 (你應該嘗試創建空DB(沒有表),當你修復prepare語句時,再次運行你的代碼)

另一方面,如果你在運行你的代碼之前創建DB和表,你只需要在查詢中修復prepare語句。 (不要忘記,dataBaseName取得你數據庫的完整路徑,如果你寫school.db,它會搜索你的DB文件bin附近的文件)

0

確保數據庫被正確創建。您可以使用外部工具(如SQLite Studio)來執行此操作。您也可以嘗試「重新創建」整個數據庫,並檢查問題是否得到解決。

看看下面的代碼:

bool School::set_db(QString usern, QString pass) 
{ 
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE"); 

    // You need to set the full path to the database file. E.g.: "C:/Databases/school1.db" 
    db1.setDatabaseName("school1.db"); 

    if(!db1.open()) 
    { 
     qDebug() << "Could not open the database connection!"; 
     qDebug() << "Error:" << db1.lastError(); 
     return false; 
    } 

    QSqlQuery query(db1); 
    QString queryString = "INSERT INTO login_t (user, pass) VALUES (:user, :pass)"; 

    if(!query.prepare(queryString)) 
    { 
     qDebug() << "Prepare:" << query.lastError(); 
     return false; 
    } 

    query.addBindValue(":user", usern); 
    query.addBindValue(":pass", pass); 

    if(!query.exec()) 
    { 
     qDebug() << "Exec:" << query.lastError(); 
     return false; 
    } 

    return true; 
} 

set_db("user1", "pass1"); 

我不知道,但似乎你顯示錯誤消息的代碼另一塊要打印。也許在某個地方,你正試圖創建login_t表。

相關問題