Salut la liste, je d�couvre en ce moment les joies de Jdbc et consorts et
j'ai l� un petit bug tr�s bizarre. Dans l'application de mon entreprise, on
met � jour les donn�es d'une base au moyen de ResultSet et autres objets
typiques. Dans le cas d'une mise � jour de MySQL, tout va bien. Mais pour
Oracle, le genre de code ci-dessous foire lamentablement. Disposez-vous
d'explication convaincantes (ou m�me justes ;) ?
Merci
Nicolas Delsaux
PS :; le bout de code qui plante
private synchronized void insert(ResultSet rs,RecordSet l)
{
String[] fields;
fields = l.getFields();
if (fields != null)
{
try
{ // on se positionne sur la ligne d'insertion
rs.moveToInsertRow();
for( int i = 0 ; i < rs.getMetaData().getColumnCount() ;
i++ ) {
rs.updateNull(i+1); // initialisation de tous les champs
� NULL
}
for( int i = 0 ; i < fields.length ; i++ )
{// mise � jour pour les champs envoy�s
Object tmp = l.getFieldValue(fields[i]);
if( tmp != null ) {
rs.updateObject(fields[i],tmp);
}
}
try
{
rs.insertRow(); // insertion dans la base de donn�es
}
catch(SQLException e)
{// un pb : on suppose que l'enregistrement existe d�j�
update(l); // on tente de le mettre � jour
}
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
Et la stack trace de l'exception
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcBoundCol.setRowValues(JdbcOdbcBoundCol.java:240)
at sun.jdbc.odbc.JdbcOdbcResultSet.updateNull(JdbcOdbcResultSet.java:3044)
at TableScript.insert(TableScript.java:720)
Je pr�cise pour les pointilleux que le ResultSet est cr�� dans la m�thode
appelante au moyen des lignes
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from " + tables[0] + "
where 1=2");
et que le code n'est pas de moi ;)