# SQLite fügt nur den ersten Datensatz ein



## Louis94 (31. Dez 2011)

Hi,

Ich versuche gerade an einer SQLite Datenbank meine Datensätze zu speichern. Den ersten Kontakt speichert es, aber wenn ich einen zweiten Kontakt anlege kommt keine Fehlermeldung er wird erzeugt und ist angeblich in der Datenbank. Aber nach einem Neustart wird nur der erste Kontakt wieder angezeigt. Ich bekomm keine Fehlermeldung. Ich hab die Datenbank schon per Editor angeschaut, aber beim hinzufügen eines Datensatzes per Java wird der zweite dort auch wieder nicht angezeigt.

Hier der Quellcode:

```
package datenbank;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import Kontakt.Kontakt;

public class Datenbank{
	
	private static Datenbank dieDatenbank= new Datenbank();
	private Connection dbVerbindung;
	
	private Datenbank()
	{
		try
		{
			//Class.forName("com.mysql.jdbc.Driver").newInstance();
			//dbVerbindung = DriverManager.getConnection("jdbc:mysql://128.65.220.93:3306/ni22430_1_DB","ni22430_1_DB","m0juu2oJ");
			
			
			Class.forName("org.sqlite.JDBC");
			dbVerbindung = DriverManager.getConnection("jdbc:sqlite:kontakt.db");
			
			dbVerbindung.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS kontakte (`id` INT( 100 ) NOT NULL PRIMARY KEY ,`vorname` VARCHAR( 100 ) NOT NULL ,`nachname` VARCHAR( 100 ) NOT NULL ,`privadr` VARCHAR( 100 ) NOT NULL ,`privtel` VARCHAR( 100 ) NOT NULL ,`privmobil` VARCHAR( 100 ) NOT NULL ,`privfax` VARCHAR( 100 ) NOT NULL ,`geschadr` VARCHAR( 100 ) NOT NULL ,`geschtel` VARCHAR( 100 ) NOT NULL ,`geschfax` VARCHAR( 100 ) NOT NULL) ");
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	public static Datenbank getInstance()
	{
		return dieDatenbank;
	}
	
	public void create(Kontakt k)
	{
		try
		{
			PreparedStatement prepStatement = dbVerbindung.prepareStatement("INSERT INTO kontakte VALUES(?,?,?,?,?,?,?,?,?,?)");
			int i  = nextId();
			prepStatement.setInt(1, i);
			prepStatement.setString(2, k.getVorname());
			prepStatement.setString(3, k.getNachname());
			prepStatement.setString(4, k.getPrivatAdresse());
			prepStatement.setString(5, k.getPrivatFestnetz());
			prepStatement.setString(6, k.getPrivatHandy());
			prepStatement.setString(7, k.getPrivatFax());
			prepStatement.setString(8, k.getGeschAdresse());
			prepStatement.setString(9, k.getGeschFestnetz());
			prepStatement.setString(10, k.getGeschFax());
			prepStatement.executeUpdate();
			
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	public Kontakt read(int id)
	{
		try
		{
			PreparedStatement prepStatement = dbVerbindung.prepareStatement("SELECT vorname, nachname, privadr, privtel, privmobil, privfax, geschadr, geschtel, geschfax FROM kontakte WHERE id = ?");
			prepStatement.setInt(1, id);
			ResultSet ergebnis = prepStatement.executeQuery();
			if (ergebnis.next())
			{				
				Kontakt k = new Kontakt(ergebnis.getString(1), ergebnis.getString(2), ergebnis.getString(3), ergebnis.getString(4), ergebnis.getString(5), ergebnis.getString(6),ergebnis.getString(7), ergebnis.getString(8), ergebnis.getString(9));
				k.setId(id);
				return k;
			}
		}
		catch (Exception ex)
		{
			System.out.println(ex.getMessage());
			ex.printStackTrace();
		}
		return null;
	}
	
	public void update(Kontakt k)
	{
		try
		{
			PreparedStatement prepStatement = dbVerbindung.prepareStatement("UPDATE kontakte SET vorname = ?, nachname = ?,"
																			+"privadr = ?, privtel = ?, privmobil = ?, privfax = ?,"
																			+"geschadr = ?, geschtel = ?, geschfax = ? WHERE id = ?");
			prepStatement.setInt(10, k.getId());
			prepStatement.setString(1, k.getVorname());
			prepStatement.setString(2, k.getNachname());
			prepStatement.setString(3, k.getPrivatAdresse());
			prepStatement.setString(4, k.getPrivatFestnetz());
			prepStatement.setString(5, k.getPrivatHandy());
			prepStatement.setString(6, k.getPrivatFax());
			prepStatement.setString(7, k.getGeschAdresse());
			prepStatement.setString(8, k.getGeschFestnetz());
			prepStatement.setString(9, k.getGeschFax());
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	public void delete(Kontakt k)
	{
		try 
		{
			PreparedStatement prepStatement = dbVerbindung.prepareStatement("DELETE FROM kontakte WHERE id = ?");
			prepStatement.setInt(1, k.getId());
			prepStatement.executeUpdate();
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	public List<Kontakt> kontakteLaden()
	{
		try
		{
			ResultSet rs = dbVerbindung.createStatement().executeQuery("SELECT id FROM kontakte ORDER BY nachname");
			List<Kontakt> kontaktlist = new ArrayList<Kontakt>();
			
			while (rs.next())
			{
				kontaktlist.add(read(rs.getInt(1)));
			}
			
			return kontaktlist;
				
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
			return null;
		}
	}
	
	private int nextId()
	{
		ResultSet rs;
		int i = 1;
		try {
			rs = dbVerbindung.createStatement().executeQuery("SELECT id FROM kontakte ORDER BY id DESC");
			
			if (rs.next())
			{
				i = rs.getInt(1);
			}
			
			i++;
			return i;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return i;
	}
	
	private static String defaultDirectory()
	{
	    String OS = System.getProperty("os.name").toUpperCase();
	    if (OS.contains("WIN"))
	        return System.getenv("APPDATA");
	    else if (OS.contains("MAC"))
	        return System.getProperty("user.home") + "/Library/Application "
	                + "Support";
	    else if (OS.contains("NUX"))
	        return System.getProperty("user.home");
	    return System.getProperty("user.dir");
	}
}
```


----------



## Louis94 (31. Dez 2011)

Sorry, für den Doppelpost, geht aber leider nicht anders.

Sobald ich es mit MySQL mache geht aber alles einwandfrei, ich weiß einfach nicht was falsch ist.


----------



## California (7. Jan 2012)

Schaust Du mal, ob MySQL default auf AutoCommit steht und SQLite nicht...
(ist eine Connection- Eigenschaft..)


----------

