行上有一个错误,上面写着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);
}
}
答案 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)
我不完全理解您的描述,但我认为您正在尝试分配在
中创建的PreparedStatementstmt = con.prepareStatement(SQL)
到Statement(stmt)类型的变量,并导致错误。上面的代码行有效,因为PreparedStatement是Statement的扩展(或实现)但是
ps = stmt.executeQuery();
失败,因为类Statement没有没有参数的executeQuery方法,PreparedStatement会这样做。 如果使用常规Statement,那么@Y.B.的解决方案和其他建议都很好(sum(price)的别名或按列索引获取值)。另一种方法是在原始代码中将stmt的类型更改为PreparedStatement。