我对这个函数有一个问题
String القيمة=jTextField3.getText();
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/cars","root","123456");
pstmt=conn.prepareStatement("select القيمة from eradat WHERE DATE_FORMAT(التاريخ, \"%m-%Y\") = \"01-2015\";");
pstmt.setString(1,القيمة);
rs=pstmt.executeQuery();
while(rs.next()){
jTextField3.setText(rs.getString("القيمة"));
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
finally{
try{
conn.close();
pstmt.close();
rs.close();
}
catch(Exception e){
}
}
我得到错误信息: java.sql.SQLException:参数索引超出范围(1 >参数个数,为0)。
发布于 2015-09-21 07:09:16
您正在尝试向查询添加一个参数,该参数不需要参数,只需从代码中删除pstmt.setString(1,القيمة);
,以使PreparedStatement不将任何参数绑定到您给出的查询中。因此,try catch块中的代码应该如下所示:
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/cars","root","123456");
pstmt=conn.prepareStatement("select القيمة from eradat WHERE DATE_FORMAT(التاريخ, \"%m-%Y\") = \"01-2015\";");
rs=pstmt.executeQuery();
while(rs.next()){
jTextField3.setText(rs.getString("القيمة"));
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
如果需要为查询设置参数,则需要在其中使用占位符符号?
,在这种情况下,您可以在查询中设置值。那么查询可能是这样的:
select القيمة from eradat WHERE DATE_FORMAT(التاريخ, \"%m-%Y\") = \"?\";
并且您可以使用以下命令设置where子句的值
pstmt.setString(1,"01-2015");
发布于 2015-09-21 07:24:02
您正在尝试使用未在语句中定义的预准备语句设置参数。因此,只需删除/注释代码中的以下行:
pstmt.setString(1,القيمة);
https://stackoverflow.com/questions/32684783
复制