2015-07-11 351 views
1

我在QT5中的SQLite數據庫有問題。我有一個名爲「mytable」的表格,我試圖在那裏保存,更改或加載數據。該表看起來像這樣(CODE):QT5和SQLite3「無查詢無法獲取行」

"mytable" ("id" INTEGER PRIMARY KEY NOT NULL , "name" VARCHAR NOT NULL , "akcie" INTEGER NOT NULL) 

然後我試着與這個數據庫是這樣的(CODE)工作:

void MainWindow::on_pushButton_save_clicked() 
{ 
    QString jmeno, IDcko, ak; 

    IDcko = ui->lineEdit_ID->text(); 
    jmeno = ui->lineEdit_Name->text(); 
    ak = ui->lineEdit_Akcie->text(); 

    open_connection(); 

    QSqlQuery query; 
    query.prepare("INSERT INTO mytable(id, name, akcie) VALUES(id= \'"+ IDcko +"\', name= \'"+ jmeno +"\', akcie= \'"+ ak +"\')"); 

    if(query.exec()) 
    { 
     QMessageBox::information(this, tr("SAVED"), tr("Some text.")); 
     close_connection(); 
    } 
    else 
    { 
     QMessageBox::critical(this, tr("NOT SAVED"), query.lastError().text()); 
     qDebug() << query.lastError().text(); 
    } 
} 

在這樣同一個文件IM開放連接(CODE):

bool MainWindow::open_connection() 
{ 
    QSqlDatabase database; 
    database = QSqlDatabase::addDatabase("QSQLITE"); 
    database.setDatabaseName("‪..\\added\\test_table.sqlite"); 
    if(!database.open()) 
    { 
     qDebug() << "not opened connection"; 
     return false; 
    } 
    else 
    { 
     qDebug() << "opened connection"; 
     return true; 
    } 
} 

和IM仍然得到錯誤:「沒有查詢無法抓取行」,我一直在尋找的答案真的很難,但毫無效果。難道是因爲某些包含或我做錯了什麼?

非常感謝您的幫助!

+0

什麼'QSqlQuery :: lastError()'說? – cmannett85

+0

@ cmannett85它仍然說:「沒有查詢無法獲取行」 –

回答

2

您不準備查詢權。使用bindings像:

query.prepare("INSERT INTO mytable(id, name, akcie) VALUES(:id, :name, :akcie)"); 
query.bindValue(":id", IDcko); 
query.bindValue(":name", jmeno); 
query.bindValue(":akcie", ak);  
+0

不幸的是,仍然是相同的錯誤.. –

+0

打印出你正在準備與查詢'query.execucuQueryQuery()' – Miki

+0

@PetrBečka你應該儘可能多地使用綁定無論如何可以防止SQL注入攻擊。 – cmannett85