Description:
When trying to insert a row into a resultset that has atleast one record in it (i.e. the error does not occur if the resultset is empty) the following error occurs.
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
at com.mysql.jdbc.UpdatableResultSet.moveToInsertRow(UpdatableResultSet.java:912)
at com.sun.rowset.JdbcRowSetImpl.moveToInsertRow(JdbcRowSetImpl.java:3151)
at com.rjg.test.TestInsert.<init>(TestInsert.java:43)
at com.rjg.test.TestInsert.main(TestInsert.java:101)
This error does not occur when using mysql-connector-java-3.0.17-ga-bin.jar library.
OS: Windows XP SP2
MySQL server version: 5.0.15-nt
Connector/J version: 3.1.12
Java version:
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
How to repeat:
Populate test table.
USE test;
DROP TABLE IF EXISTS time_sheet;
CREATE TABLE time_sheet (
time_sheet_id INT AUTO_INCREMENT,
time_code_id INT NOT NULL,
start_time TIMESTAMP NOT NULL,
finish_time TIMESTAMP NOT NULL,
comment VARCHAR(100) default NULL,
PRIMARY KEY (time_sheet_id)
);
insert into time_sheet
values
(null, 1, '2006-05-01 07:55:00', '2006-05-01 09:55:00', null);
Run this test class.
import java.sql.Timestamp;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.ResultSetMetaData;
import javax.sql.rowset.spi.SyncProviderException;
import javax.sql.rowset.JdbcRowSet;
import com.sun.rowset.JdbcRowSetImpl;
public class TestInsert {
private final String DB_URL =
"jdbc:mysql://localhost:3306/test?dumpQueriesOnException=true";
private final String USERNAME = "username";
private final String PASSWORD = "password";
private JdbcRowSetImpl rowSet = null;
private ResultSetMetaData metaData = null;
//==============================================================================
public TestInsert( ) {
try {
Class.forName( "com.mysql.jdbc.Driver" ); // load database driver class
rowSet = new JdbcRowSetImpl ();
rowSet.setConcurrency(ResultSet.CONCUR_UPDATABLE);
rowSet.setUrl(DB_URL); // set database URL
rowSet.setUsername(USERNAME); // set username
rowSet.setPassword(PASSWORD); // set password
rowSet.setCommand("select * from time_sheet"); // set query
rowSet.execute();
metaData = rowSet.getMetaData();
showTable();
rowSet.moveToInsertRow();
rowSet.updateNull("time_sheet_id");
rowSet.updateInt("time_code_id", 1);
rowSet.updateTimestamp("start_time", Timestamp.valueOf("2006-05-01 07:55:00"));
rowSet.updateTimestamp("finish_time", Timestamp.valueOf("2006-05-01 09:55:00"));
rowSet.updateNull("comment");
rowSet.insertRow();
rowSet.moveToCurrentRow();
showTable();
rowSet.close();
} catch ( SQLException sqlException ) {
sqlException.printStackTrace();
System.exit( 1 );
} catch ( ClassNotFoundException classNotFound ) {
classNotFound.printStackTrace();
System.exit( 1 );
}// catch.
}// Constructor.
//==============================================================================
private void showTable( ) {
try {
int numberOfColumns = metaData.getColumnCount();
rowSet.beforeFirst();
// display rowset header
for ( int i = 1; i <= numberOfColumns; i++ ) {
System.err.print(metaData.getColumnName(i) + "\t");
}
System.err.println();
// display each row
while ( rowSet.next() ) {
for ( int i = 1; i <= numberOfColumns; i++ ) {
System.err.print(rowSet.getObject(i)+ "\t");
}// for.
System.err.println();
} // end while
} catch ( SQLException sqlException ) {
sqlException.printStackTrace();
System.exit( 1 );
}// catch.
}// showTable.
//==============================================================================
public static void main(String[] args) {
new TestInsert();
}// main.
//==============================================================================
}// TestCachedRowSet.
Suggested fix:
None known.