簡體   English   中英

為什么我的查詢無法正常運行? 每當我通過executeQuery方法傳遞字符串變量時,都會出現錯誤

[英]Why won't my query run properly? When ever I pass a string variable through the executeQuery method I get an error

這行上有一個錯誤,說ps = stmt.executeQuery(); ....該錯誤表明接口Statement中的方法executeQuery無法應用於給定類型; 必需:找到的字符串:無自變量原因:實際和正式自變量列表的長度不同

但是每當我通過該行傳遞String時,我都會收到一條錯誤消息,提示在准備好的語句上不允許java.sql.SQLException:Method'executeQuery(String)'...

此方法適用於將所有Integer值添加到SQL表的列中的按鈕。

private void btnCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                             

try{

String SQL = "SELECT SUM(PRICE) FROM MENU";

stmt = con.prepareStatement(SQL);

ps = stmt.executeQuery();

if(ps.next()) {

String total = ps.getString("SUM(PRICE)");

textTotalCost.setText(total);
      }                    
    }

catch (SQLException err) {

JOptionPane.showMessageDialog(null, err);
    } 

 }

問題變更后更新

在您的SQL語句中,沒有為計算的列SUM(PRICE)明確指定列名。 實際上幾乎不會是“ SUM(PRICE)”。 嘗試命名您的列。 當傳遞參數時, prepareStatement也是有用的。 簡單Select不需要它:

private void btnCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                             
    try{
         String SQL = "SELECT SUM(PRICE) As PRICE_TOTAL FROM MENU";
         Statement stmt = con.createStatement();
         ResultSet ps = stmt.executeQuery(SQL);
         if(ps.next()) {
             String total = ps.getString("PRICE_TOTAL");
             textTotalCost.setText(total);
         }                    
    }
    catch (SQLException err) {
        JOptionPane.showMessageDialog(null, err);
    } 
}

或按列索引而不是名稱訪問值:

private void btnCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                             
    try{
         String SQL = "SELECT SUM(PRICE) FROM MENU";
         Statement stmt = con.createStatement();
         ResultSet ps = stmt.executeQuery(SQL);
         if(ps.next()) {
             String total = ps.getString(0);
             textTotalCost.setText(total);
         }                    
    }
    catch (SQLException err) {
        JOptionPane.showMessageDialog(null, err);
    } 
}

列名稱是獲取數據時必須的

謝謝

我不完全理解您的描述,但我認為您正在嘗試分配在中創建的PreparedStatement

stmt = con.prepareStatement(SQL)

到Statement(stmt)類型的變量,這將導致錯誤。 上面的代碼行之所以有效,是因為PreparedStatement是Statement的擴展(或實現),但

ps = stmt.executeQuery();

失敗,因為類Statement沒有沒有參數的executeQuery方法,PreparedStatement卻沒有。 如果可以使用常規語句,則@YB的解決方案和其他建議都很好(sum(price)的別名或通過列索引獲取值)。 另一種方法是在原始代碼中將stmt的類型更改為PreparedStatement。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM