# executeBatch result immet mit Statement.SUCCESS_NO_INFO



## scabies (31. Aug 2009)

Hallo,

Ich versuche für mehrere Insert and Update Anweisung als Prepared Statement and als Batch Operation auszuführen. Ich habe executeBatch results immer den Werd -2. Ich habe mein sql Anweisung und connection kontrolliert aber es gab kein Fehler. Was kann das Problem sein?

MfG


----------



## maki (31. Aug 2009)

Wieso Problem?
-2 ist der int Wert der Konstante SUCCESS_NO_INFO, die dafür sorgt das es eben keine echten Rückgabewerte gibt wenn alles glatt läuft.


----------



## scabies (31. Aug 2009)

nach der Api für Statement Interface SUCCESS_NO_INFO constant ist;"indicating that a batch statement executed successfully but that no count of the number of rows it affected is available."
Aber für mein update and insert Anweisung wird nicht solche results erwartet.


----------



## maki (31. Aug 2009)

Zeig mal den Code..


----------



## scabies (1. Sep 2009)

```
#public void commit(OracleDataSource ds, List list) {
        if (list.isEmpty())
            return;
        Connection conn = null;
        try {
            conn = ds.getConnection();
            conn.setAutoCommit(false);
            String sql = ((Object[]) list.get(0))[0].toString();
            PreparedStatement p = null;

/**a ist a Object Array. Enthaelt das Statement and Parameter Objects. Bsp: new Object[]{
                        "update TABLE_X set DTDATE=?, SNAME=?, " +
                                "SINFO=? where SCODE=?",
                        new java.sql.Date(date.getTime()), name, info, code});
**/
            for (Object a : list) {
                Object[] args = (Object[]) a;  
                if (p == null || !sql.equals(args[0])) {
                    sql = args[0].toString();
                    if (p != null) {
                        p.executeBatch();
                        p.close();
                    }
                    p = conn.prepareStatement(sql);
                }
                for (int i = 1; i < args.length; i++)
                    p.setObject(i, args[i]);
                p.addBatch();
            }
            int[] ints = p.executeBatch();
//            for (int anInt : ints) {
//                System.out.println(anInt);
//            }
            conn.commit();
            conn.setAutoCommit(true);
            p.close();
            conn.close();
        }
        catch (Exception e) {
            logger.error(e);
        }
        finally {
            try {
                conn.close();
            } catch (Exception e) {
               logger.error(e);
            }
        }
    }
```


----------

