2014-10-08 96 views
0

好吧,我知道答案很簡單,我會感到非常愚蠢的,但...JDBC的PreparedStatement,UNION選擇和參數傳遞

的Java JDK 1.7中,Sybase JDBC驅動程序

代碼snipit:

String sql = "select <blah> 
    from <blah blah> 
    where date1 = ? 
    UNION 
    select <blah> 
    from <blah blah> 
    where date2 = ?"; 

Connection conn = ConnectionManager.getConnection(); 
PreparedStatement stmt = conn.prepareStatement(sql); 

logger.info("parmemeter count: " + stmt.getParameterMetaData().getParameterCount()); 

stmt.setDate(1, new java.sql.Date(date.getTime())); 
stmt.setDate(2, new java.sql.Date(date.getTime())); 

ResultSet rs = stmt.executeQuery(); 
while rs.next()) { 

    // the rest of the code 

    } 
  1. 那麼,爲什麼parmeter只算1?
  2. 運行程序引發錯誤抱怨:java.sql.SQLException中:無效參數索引2
  3. 如果我減少SQL要麼片和降低的setDate()到只有1它工作得很好。
  4. 與UNION的SQL運行在Interactive SQL會話就好了(?填充有當然的日期)

回答

0

我只是碰到了這個問題,並this thread是非常有益的。這不是聯盟條款引發的錯誤;這是你傳遞的日期。如果你使用to_date()(你的代碼片段中不清楚),你需要在查詢中傳遞一個字符串(而不是日期)。祝你好運!