Java中的奇怪异常PreparedStatement:参数索引超出范围

时间:2013-04-17 11:25:00

标签: java prepared-statement

我有一个字符串

    final static String OPENTICID="SELECT j.`uid`,j.`key`,j.`status`,j.`group`,j.`createdDate`,j.`updatedDate`,j.`priority`,j.`reporter`,j.`assignee`,`type`,j.`summary` FROM jira_local j "+ 
"                     INNER JOIN "+
"                      ( SELECT MAX(uid) u FROM jira_local GROUP BY `key` ) x "+
"                      ON j.uid=x.u "+
"                     WHERE convert_tz(createdDate,'+05:30','-05:00') > ? "+
"                      AND `status` IN ('acknowledged','In process','Advanced Investigation','Open','Assigned','More investigation','reopened','New','partenered investigation) "+
"                      AND `group` NOT IN ('l3','jira_pms_connect_l3_support','l3_istay2','l3_expedia','jira-ota-webservices','jira_ota_pushstyle_dev','l3_web_3.0','jira_l3_istay2betasupport','l3_ihotelier','jira_ihotelier_l3_support','l3_databridge','l3_istay2betasupport','istay3 team','reservations l3 development team','jira_ihotelier 3.0_dev') "+
"                     AND convert_tz(updatedDate,'+05:30','-05:00') < ? ";

查询使用PreparedStatement

设置2 ?

以下是我的代码段

con = DBConnector.getInstance().getConnection("travelclick");
            PreparedStatement pst=con.prepareStatement(new StringBuilder("select `group` , count(*) cnt from (" +
                                                        OPENTICID +
                                                        ") y group by `group`").toString());
            System.out.println("select `group` , count(*) cnt from (" +
                                                        OPENTICID +
                                                        ") y group by `group`");
            System.out.println(pst);
            pst.setTimestamp(1, new java.sql.Timestamp(octDate.getTimeInMillis()));
            System.out.println(pst);
            pst.setTimestamp(2, new java.sql.Timestamp(end.getTimeInMillis()));

            ResultSet rs=pst.executeQuery();

以下是输出

select `group` , count(*) cnt from (SELECT j.`uid`,j.`key`,j.`status`,j.`group`,j.`createdDate`,j.`updatedDate`,j.`priority`,j.`reporter`,j.`assignee`,`type`,j.`summary` FROM jira_local j                      INNER JOIN                       ( SELECT MAX(uid) u FROM jira_local GROUP BY `key` ) x                       ON j.uid=x.u                      WHERE convert_tz(createdDate,'+05:30','-05:00') > ?                       AND `status` IN ('acknowledged','In process','Advanced Investigation','Open','Assigned','More investigation','reopened','New','partenered investigation)                       AND `group` NOT IN ('l3','jira_pms_connect_l3_support','l3_istay2','l3_expedia','jira-ota-webservices','jira_ota_pushstyle_dev','l3_web_3.0','jira_l3_istay2betasupport','l3_ihotelier','jira_ihotelier_l3_support','l3_databridge','l3_istay2betasupport','istay3 team','reservations l3 development team','jira_ihotelier 3.0_dev')                       AND convert_tz(updatedDate,'+05:30','-05:00') < ? ) y group by `group`
com.mysql.jdbc.PreparedStatement@1484a05: select `group` , count(*) cnt from (SELECT j.`uid`,j.`key`,j.`status`,j.`group`,j.`createdDate`,j.`updatedDate`,j.`priority`,j.`reporter`,j.`assignee`,`type`,j.`summary` FROM jira_local j                      INNER JOIN                       ( SELECT MAX(uid) u FROM jira_local GROUP BY `key` ) x                       ON j.uid=x.u                      WHERE convert_tz(createdDate,'+05:30','-05:00') > ** NOT SPECIFIED **                       AND `status` IN ('acknowledged','In process','Advanced Investigation','Open','Assigned','More investigation','reopened','New','partenered investigation)                       AND `group` NOT IN ('l3','jira_pms_connect_l3_support','l3_istay2','l3_expedia','jira-ota-webservices','jira_ota_pushstyle_dev','l3_web_3.0','jira_l3_istay2betasupport','l3_ihotelier','jira_ihotelier_l3_support','l3_databridge','l3_istay2betasupport','istay3 team','reservations l3 development team','jira_ihotelier 3.0_dev')                       AND convert_tz(updatedDate,'+05:30','-05:00') < ? ) y group by `group`
com.mysql.jdbc.PreparedStatement@1484a05: select `group` , count(*) cnt from (SELECT j.`uid`,j.`key`,j.`status`,j.`group`,j.`createdDate`,j.`updatedDate`,j.`priority`,j.`reporter`,j.`assignee`,`type`,j.`summary` FROM jira_local j                      INNER JOIN                       ( SELECT MAX(uid) u FROM jira_local GROUP BY `key` ) x                       ON j.uid=x.u                      WHERE convert_tz(createdDate,'+05:30','-05:00') > '2012-10-01 12:00:00'                       AND `status` IN ('acknowledged','In process','Advanced Investigation','Open','Assigned','More investigation','reopened','New','partenered investigation)                       AND `group` NOT IN ('l3','jira_pms_connect_l3_support','l3_istay2','l3_expedia','jira-ota-webservices','jira_ota_pushstyle_dev','l3_web_3.0','jira_l3_istay2betasupport','l3_ihotelier','jira_ihotelier_l3_support','l3_databridge','l3_istay2betasupport','istay3 team','reservations l3 development team','jira_ihotelier 3.0_dev')                     AND convert_tz(updatedDate,'+05:30','-05:00') < ? ) y group by `group`
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2569)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2600)
    at com.mysql.jdbc.PreparedStatement.setTimestampInternal(PreparedStatement.java:3552)
    at com.mysql.jdbc.PreparedStatement.setTimestamp(PreparedStatement.java:3507)
    at com.cybage.WeeklyStatusReport.OpenTicketsCountReport(WeeklyStatusReport.java:873)
    at com.cybage.WeeklyStatusReport.generateReport(WeeklyStatusReport.java:319)
    at com.cybage.WeeklyStatusReport.main(WeeklyStatusReport.java:1193)

我不知道为什么有一个例外我有2个?和2个pst.setTimeStamp()

1 个答案:

答案 0 :(得分:2)

您缺少一个引号:

'partenered investigation) "+
                        ^

                        |
here --------------------

旁注,那就是一个查询 - 可能更容易维护为存储过程(在代码中很难读取)。