使用OracleCachedRowSet获取时间戳

时间:2012-10-17 10:58:52

标签: java oracle

代码:

 OracleCachedRowSet rowSet =  new OracleCachedRowSet();             
 ResultObject obj = new ResultObject(0,null);      
 PreparedStatement pstat = connection.prepareStatement(strQry);
 rowSet.populate(pstat.executeQuery());
 rowSet.beforeFirst();

 while(rowSet.next()){
      System.out.println("Conference name "+rowSet.getString(1));
      System.out.println("StartTime "+rowSet.getTimestamp(5)) ;
 }

当我运行上面的代码时,我得到了如下错误:

java.sql.SQLException: Invalid column type
    at oracle.jdbc.rowset.OracleCachedRowSet.getTimestamp(OracleCachedRowSet.java:4399)
    at test.Test.main(Test.java:102)

如果我使用ResultSet代替OracleCachedRowSet

,同样的工作正常(请查看以下正确的代码)
  PreparedStatement pstat = connection.prepareStatement(strQry);                    
  ResultSet rset =   pstat.executeQuery();                  
  while(rset.next()){
        System.out.println("Conference name "+rset.getString(1));
        System.out.println("StartTime "+rset.getTimestamp(5)) ;
  }

getTimestamp()使用OracleCachedRowSet吗?

2 个答案:

答案 0 :(得分:0)

我们可以通过以下方式实现定义的事物:

java.util.Date date = new java.util.Date(((oracle.sql.TIMESTAMP)rSet.getObject(5)).timestampValue().getTime())

答案 1 :(得分:0)

我用过这个:

Object timeStampObj = result.getObject(2);
if (timeStampObj instanceof oracle.sql.TIMESTAMP){
    oracle.sql.TIMESTAMP oraTimeStamp = (oracle.sql.TIMESTAMP)timeStampObj;
    report.setLastRefresh(new Timestamp(oraTimeStamp.longValue()));
}

此结果是OracleCachedRowSet的一个实例,报表实例的setLastRefresh采用Timestamp。我之前的代码是:

report.setLastRefresh(result.getTimestamp(2));

以上行在Tomcat中有效,但WebSphere没有抛出“无效列类型”异常。