[英]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.