为什么我的查询无法正常运行?当我通过executeQuery方法传递字符串变量时,我得到一个错误

时间:2016-02-27 19:34:33

标签: java sql sum

行上有一个错误,上面写着ps = stmt.executeQuery(); ....错误说接口Statement中的方法executeQuery不能应用于给定的类型;     必需:字符串     发现:没有争论     原因:实际和正式的参数列表长度不同

但每当我通过该行传递一个String时,我会收到一条错误,说java.sql.SQLException:Method' executeQuery(String)'准备好的声明不允许......

此方法用于在SQL表的列中添加所有Integer值的按钮。

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);
    } 

 }

3 个答案:

答案 0 :(得分:0)

在问题更改后更新了

在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);
    } 
}

答案 1 :(得分:0)

获取数据时必须使用列名

由于

答案 2 :(得分:0)

我不完全理解您的描述,但我认为您正在尝试分配在

中创建的PreparedStatement
stmt = con.prepareStatement(SQL)

到Statement(stmt)类型的变量,并导致错误。上面的代码行有效,因为PreparedStatement是Statement的扩展(或实现)但是

ps = stmt.executeQuery();

失败,因为类Statement没有没有参数的executeQuery方法,PreparedStatement会这样做。 如果使用常规Statement,那么@Y.B.的解决方案和其他建议都很好(sum(price)的别名或按列索引获取值)。另一种方法是在原始代码中将stmt的类型更改为PreparedStatement。