2016-11-23 68 views
0

我尝试将编号传递给PrepareStmt,但得到此错误。我无法理解我的问题。为什么我得到“java.sql.SQLException:列索引无效”?

查询:

private static final String SQL_FIND_ALL_CALENDARS = "SELECT * FROM calendar WHERE idCall > '?';"; 

功能:

private List<Calendar> findAll(Connection con) throws SQLException { 
     List<Calendar> calendar = new ArrayList<Calendar>(); 
     PreparedStatement prsmt = null; 
     ResultSet rs = null; 
     try { 
      prsmt = con.prepareStatement(SQL_FIND_ALL_CALENDARS); 
      prsmt.setInt(1, TestOracleJDBC.idCall); 
      rs = prsmt.executeQuery(); 
      while (rs.next()) { 
       Calendar calendar2 = extractCalendar(rs); 
       calendar.add(calendar2); 
      } 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } finally { 
      rs.close(); 
      prsmt.close(); 
     } 
     return calendar; 
    } 

在其他类我的参数:

public static int idCall = 1; 
+0

三件事:(一)那么你的'extractCalendar'方法呢?请编辑问题以包含它,(b)不要在查询中使用分号,(c)如果没有帮助,请解释为什么不能。解释你想要代码做什么以及它现在正在做什么。 –

回答

0

单引号(')表示在SQL字符串文字。当使用绑定变量时,不应该用引号括住?--这会将其更改为带问号的字符串文本,而不是绑定值的占位符。

只是删除它,你应该确定:

private static final String SQL_FIND_ALL_CALENDARS = 
    "SELECT * FROM calendar WHERE idCall > ?"; 
    // Here -------------------------------^ 
+0

不幸的是,它并没有帮助我。 – qwerty

相关问题