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 ;)

Répondre à