我在问这个之前就已经考虑过了,但我不知道我是不是做错了什么。
我试着做这样的事情:
String query = "select nombre from DatosPersonas where nombre = '?'";
System.out.println("Introduce nomber a buscar");
String nom = teclado.next();
PreparedStatement pstmt = (PreparedStatement)cn.prepareStatement(query);
pstmt.setString(1, nom);
ResultSet rs1 = pstmt.executeQuery(query);
while (rs1.next()) {
String nombre = rs1.getString("nombre");
System.out.println(nombre);
}但得到了一个
SQLException:超出范围的参数索引(1 >参数数,即0)。
顺便说一句,我是新来的,我编程时间不长,这是我第一次尝试使用PreparedStatement。谢谢
发布于 2018-05-30 08:11:28
使用f1sh answer更正查询后,将遇到第二个问题。
你执行错误的方法。目前,您没有使用您已经定义的PreparedStatement实例,而是像执行Statement一样执行String查询。
您需要执行PrepatedStatement.executeQuery(),而不是Statement.executeQuery(String)。
所以使用ResultSet rs1 = pstmt.executeQuery();。
发布于 2018-05-30 07:57:06
您需要使用?而不是'?'
String query = "select nombre from DatosPersonas where nombre = ?";这样,?就会被视为一个占位符,可以用pstmt.setString(1, nom);填充,否则它就是查询中的一个静态字符串。
另外,您使用了错误的方法,as AxelH points out in his answer。
发布于 2018-05-30 08:10:38
尝试使用以下代码
String query = "select nombre from DatosPersonas where nombre = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
if(!isInteger()){
pstmt.setString(1, nom);
ResultSet testExecutions = pstmt.executeQuery();
while (pstmt.next()) {
String nombre = pstmt.getString(1);
}
}方法是否检查字符串。
public static boolean isInteger(String input )
{
try
{
Integer.parseInt( input );
return true;
}
catch( Exception )
{
return false;
}
}https://stackoverflow.com/questions/50599239
复制相似问题