2017-09-29 108 views
1

我已經連接到PostgreSQL數據庫成功,但我似乎無法查詢它我已經嘗試了幾個查詢,但仍然面臨着這個錯誤。無法查詢PostgreSQL數據庫

Connection Successful 
QSqlError("42601", "QPSQL: Unable to create query", "ERROR: syntax error at 
end of input\nLINE 1: EXECUTE \n    ^\n(42601)") 

我的代碼

void MainWindow::connection() 
{ 
    QSqlDatabase db; 
    db = QSqlDatabase::addDatabase("QPSQL"); 
    db.setHostName("localhost"); 
    db.setDatabaseName("postgres"); 
    db.setUserName("postgres"); 
    db.setPassword("xxx"); 
    db.setPort(5433); 
    if (db.open()) 
     qDebug() << "Connection Successful"; 
    else 
     qDebug() << "Connection Failed!"; 
} 

void MainWindow::query() 
{ 
    QSqlQuery query("select * from company"); 
    if(!query.exec()) 
      qDebug() << query.lastError(); 
    else 
    { 
     while(query.next()) 
     { 
      qDebug() << query.value(0).toString(); 
      ui->label_2->setText(query.value(0).toString()); 
     } 
    } 
} 

誰能請賜教

+0

你看看日誌文件的PostgreSQL服務器上? –

回答

1

您正確使用Qt功能。

QSqlQuery query("select * from company");直接執行查詢,不需要調用exec()。調用exec()會運行先前準備好的查詢,但是您沒有準備好導致錯誤的任何信息。

你可能想諮詢Executing SQL StatementsSqlQuery reference

編輯:這樣的結構對我的作品:

QSqlQuery query("select * from company"); 
QSqlError error = query.lastError(); 
if (error.type() == QSqlError::NoError) { 
    while(query.next()) 
    { 
     qDebug() << query.value(0).toString(); 
     ui->label_2->setText(query.value(0).toString()); 
    } 
} 
else { 
    qDebug() << error.text(); 
} 
+0

我剛剛嘗試過,沒有錯誤,但現在不執行查詢。 – Tony

+1

您確定您正在正確的數據庫上運行查詢嗎?您將postgres指定爲數據庫的名稱。當你改變你的代碼時,也編輯你的問題以反映你的改變,所以我們知道你在做什麼。 – Eelke

+0

執行查詢後檢查錯誤總是一個好主意。在我的答案中查看我的示例代碼。 – Eelke