# SQL-Problem: Insert wird nicht ausgeführt



## lyrics (22. Sep 2004)

Hallo Leute habe gerade versucht auf eine ms Access db zuzugreifen. Dabei ist mir aufgefallen das select, update und delete ohne probleme funktioniert.

der insert befehl im gegenzug wird nicht ausgeführt.


```
import java.lang.*;
import java.sql.*;

/* Listing0413 */

public class DBZugriff
{
  public static void main(String[] args)
  {
      try
      {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        
        Connection connection = DriverManager.getConnection("jdbc:odbc:todo", "", "");
        
        Statement statement = connection.createStatement();
        
        ResultSet resultSet = statement.executeQuery("select * from benutzer"); 
        
        ResultSetMetaData rsmd = resultSet.getMetaData();
        
        while(resultSet.next())
        {
            for(int i = 1; i <= rsmd.getColumnCount(); i++)
            {
                System.out.print(resultSet.getString(rsmd.getColumnName(i)));
            }
            System.out.println();
        }
        
        resultSet.close();
        
        //System.out.println(statement.executeUpdate("delete from benutzer where Name = 'Müller' and Passwort = '10'"));
        //System.out.println(statement.executeUpdate("insert into benutzer values('TEST','TEST')"));
        //System.out.println(statement.executeUpdate("update benutzer set Name = 'peter' where Name = 'klause'"));
        int ok = statement.executeUpdate("insert into Benutzer values('Hans', 'Peter')");
        System.out.println(ok);
        
      }
      catch(ClassNotFoundException err)
      {
        System.out.println(err);
      }
      catch(SQLException err)
      {
        System.out.println(err);
      }
      System.exit(0);
  }
}
```

Ausgabe ist:

peterpan
aa
bb
cc
1


Beim Insert bekomme ich als Rückgabe wert eine 1 die doch darauf hinweiset. das 1 datensatz geändert (hinzugefügt ) wurde. tatsächlich setzt er aber kein datensatz rein. könnt ihr mir sagen woran das liegt????

lyrics


----------



## DP (22. Sep 2004)

bei access siehste die änderungen imho erst, wenn du die connection geschlossen hast.

ansonsten schau mal in den odbc-einstellungen, ob der auto-commit gesetzt ist.

cu


----------



## Guest (22. Sep 2004)

Stimmt, oder du führst einen zweiten Befehl direkt danach aus.

Soll heißen, wenn du 2 Inserts machst:
1. "Peter Pan"
2. "Hans Wurst"

Dann wird "Peter Pan" in die Datenbank geschrieben. "Hans Wurst" allerdings nicht.
Wenn du die Connection danach schließst, ist auch "Hans Wurst" dann drinnen.

Das ist leider so, ich hab noch keine andere Möglichkeit gefunden, wie man das permanente Closen & Createn der Connection verhindern könnte.


----------



## P3AC3MAK3R (22. Sep 2004)

Ich würde mal versuchen, nach einem Insert ein manuelles Commit auszuführen:

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Connection.html#commit()

Vielleicht ist das schon des Rätsels Lösung.


----------



## thE_29 (22. Sep 2004)

da hast aber eindeutig was am treiber oder an deiner access datenbank, weil ich updaten/inserten soviel ich will und es stimmt immer gleich drinnen...

mach mal ein nur execute

mache eigentlich nie executeUpdate

glaub aber nicht das es an dem liegt!


----------



## lyrics (22. Sep 2004)

@P3AC3MAK3R
mit commit ändert sich eigentlich nix.

@dp besten dank daran hat es gelegen. schice ms mal wieder 

besten dank auf jeden

@th29
wenn es daran liegen würde, würde er doch eine exception bringen oder zumindest nicht bestägigen, das er ein satz reingeschrieben hat.


----------

