PreparedStatement SQLException

时间:2018-05-30 07:55:31

标签: java eclipse

我在询问之前已经为此做过准备,但我不知道我做错了什么或是什么。

我正在尝试做类似的事情:

setupActionBarWithNavController()

但得到了

  

SQLException:参数索引超出范围(1>参数个数,为0)。

顺便说一下,我是新来的,我已经编程了不久,这是我第一次尝试使用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); } 。谢谢

3 个答案:

答案 0 :(得分:2)

您需要使用?代替'?'

String query = "select nombre from DatosPersonas where nombre = ?";

这样?被视为可以用pstmt.setString(1, nom);填充的占位符,否则它是查询中的静态字符串。

此外,您使用了错误的方法as AxelH points out in his answer

答案 1 :(得分:2)

使用f1sh answer更正查询后,您将遇到第二个问题。

您执行了错误的方法。目前,您没有使用已定义的PreparedStatement实例,而是像String一样执行Statement查询。

您需要执行PrepatedStatement.executeQuery(),而不是Statement.executeQuery(String)

SO使用ResultSet rs1 = pstmt.executeQuery();

答案 2 :(得分:-2)

尝试使用此代码

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