I faced with a problem that occurs in this simple example:
ViewObject vo = am.createViewObjectFromQueryStmt("vo_b2b_data", "select id from b2b_data where name='test'");
vo.executeQuery();
Row row = vo.next();
result = row.getAttribute(0);result is always null!
so, I start digging with log4jdbc:
[740] vo_b2b_data ViewRowSetImpl.execute caused params to be "un"changed
[741] Carrying over CappedRowCount:-1for ViewRowSet:vo_b2b_data
[743] select id from b2b_data where name='test'
[744] *** createViewAttributeDefImpls: weblogic.jdbc[email protected]ab
[745] Bind params for ViewObject: [vo_b2b_data]AppModuleAutoContract.vo_b2b_data
[746] Column count: 1
[747] Column count: 1
[748] executeQueryForCollection ViewObject:vo_b2b_data, RowSet:vo_b2b_data
Execute query
[750] select id from b2b_data where name='test'
[751] ViewObject: [vo_b2b_data]AppModuleAutoContract.vo_b2b_data Created new QUERY statement
2012-02-03 15:25:28.250 DEBUG audit: 1. PreparedStatement.new PreparedStatement returned weblogic.jdbc.common.internal.ConnectionEnv.makeStatement(ConnectionEnv.java:1481)
2012-02-03 15:25:28.252 DEBUG audit: 1. Connection.prepareStatement(select id from b2b_data where name='test') returned [email protected] weblogic.jdbc.common.internal.ConnectionEnv.makeStatement(ConnectionEnv.java:1481)
2012-02-03 15:25:28.254 DEBUG audit: 1. PreparedStatement.setMaxRows(0) returned weblogic.jdbc.wrapper.PreparedStatement_net_sf_log4jdbc_PreparedStatementSpy.setMaxRows(null:-1)
[752] Bind params for ViewObject: [vo_b2b_data]AppModuleAutoContract.vo_b2b_data
Execute query
2012-02-03 15:25:28.261 DEBUG resultset: 1. ResultSet.new ResultSet returned weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:135)
2012-02-03 15:25:28.262 DEBUG audit: 1. PreparedStatement.executeQuery() returned [email protected] weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:135)
2012-02-03 15:25:28.264 DEBUG resultset: 1. ResultSet.next() returned true weblogic.jdbc.wrapper.ResultSet_net_sf_log4jdbc_ResultSetSpy.next(null:-1)
2012-02-03 15:25:28.265 DEBUG resultset: 1. ResultSet.isClosed() returned false weblogic.jdbc.wrapper.ResultSet.isClosed(ResultSet.java:158)
2012-02-03 15:25:28.271 DEBUG resultset: 1. ResultSet.getRow() returned 2 weblogic.jdbc.wrapper.ResultSet_net_sf_log4jdbc_ResultSetSpy.getRow(null:-1)
2012-02-03 15:25:28.272 DEBUG audit: 1. PreparedStatement.clearParameters() returned weblogic.jdbc.wrapper.PreparedStatement.clearParameters(PreparedStatement.java:268)
Execute query
Execute query
2012-02-03 15:25:29.578 DEBUG resultset: 1. ResultSet.getInt(1) returned 0 weblogic.jdbc.wrapper.ResultSet_net_sf_log4jdbc_ResultSetSpy.getInt(null:-1)
2012-02-03 15:25:29.580 DEBUG resultset: 1. ResultSet.wasNull() returned true weblogic.jdbc.wrapper.ResultSet_net_sf_log4jdbc_ResultSetSpy.wasNull(null:-1)
2012-02-03 15:25:29.583 DEBUG resultset: 1. ResultSet.next() returned true weblogic.jdbc.wrapper.ResultSet_net_sf_log4jdbc_ResultSetSpy.next(null:-1)
2012-02-03 15:25:29.584 DEBUG resultset: 1. ResultSet.isClosed() returned false weblogic.jdbc.wrapper.ResultSet.isClosed(ResultSet.java:158)
2012-02-03 15:25:29.585 DEBUG resultset: 1. ResultSet.getRow() returned 3 weblogic.jdbc.wrapper.ResultSet_net_sf_log4jdbc_ResultSetSpy.getRow(null:-1)
2012-02-03 15:25:32.388 DEBUG resultset: 1. ResultSet.close() returned weblogic.jdbc.wrapper.ResultSet.internalClose(ResultSet.java:181)I repeated the behavior in this simple code:
boolean b1, b2, b3;
int n1, n2;
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:/test.db", "1", "1");
PreparedStatement st = conn.prepareStatement("select id from b2b_data where name='test'");
st.setMaxRows(0);
ResultSet rs = st.executeQuery();
b1 = rs.next();
b2 = rs.isClosed();
n1 = rs.getRow();
//st.clearParameters();
n2 = rs.getInt(1); // 0 if clearParameters not commented
b3 = rs.wasNull();and realized that bug in clearParameters() call
may be this is error in database driver..
can i switch off clearParameters after every next some how?
ps: database sqlite3, driver sqlitejdbc-v056.jar