# Insert into Spalte ID AUTO_INCREMENT



## Iron Monkey (13. Apr 2010)

Hi!

Ich trainiere gerade mit Datenbank in Java!

Warum wird die Spalte ID überhaupt nicht um 1 hochgezählt? Ich finde den Fehler nicht.

Tabelle erzeugen:

```
statement.executeUpdate( "create table " + DB_TABLE + " ( id INTEGER DEFAULT 0 AUTO_INCREMENT, datum DATE NOT NULL, von VARCHAR(20) NOT NULL, bis VARCHAR(20) NOT NULL, pause VARCHAR(20) NOT NULL, arbeitsminuten VARCHAR(20) NOT NULL );" );
```

Insert into:

```
Date date = new Date();
		java.sql.Date sqlDate = new java.sql.Date( date.getTime() );

		String sql = "INSERT INTO " + DB_TABLE + " ( ID, DATUM, VON, BIS, PAUSE, ARBEITSMINUTEN ) values( null, ?, ?, ?, ?, ? )";

		stmt = connection.prepareStatement( sql );

		// Für ID fällt hier weg, da die ID in der Datenbank autom. hochzählt! 
		stmt.setDate( DB_COLUMN_DATUM, sqlDate );					// 1
		stmt.setString( DB_COLUMN_VON, von );						// 2
		stmt.setString( DB_COLUMN_BIS, bis );						// 3
		stmt.setString( DB_COLUMN_PAUSE, pause );					// 4
		stmt.setString( DB_COLUMN_ARBEITSMINUTEN, arbeitsminuten );	// 5
		int ergebnis = stmt.executeUpdate();

		System.out.println( "Ergebnis: " + ergebnis );
```

Gruß
Iron Monkey


----------



## SlaterB (13. Apr 2010)

String sql = "INSERT INTO " + DB_TABLE + " ( DATUM, VON, BIS, PAUSE, ARBEITSMINUTEN ) values( ?, ?, ?, ?, ? )";


----------



## Iron Monkey (13. Apr 2010)

SlaterB hat gesagt.:


> String sql = "INSERT INTO " + DB_TABLE + " ( DATUM, VON, BIS, PAUSE, ARBEITSMINUTEN ) values( ?, ?, ?, ?, ? )";



Nein, es klappt immer noch nicht!

Ausgabe:


> +---------------+---------------+---------------+---------------+---------------+---------------+
> | ID            | DATUM         | VON           | BIS           | PAUSE         | ARBEITSMINUTEN|
> +---------------+---------------+---------------+---------------+---------------+---------------+
> |               | 2010-04-13    | 08:00         | 17:00         | 30            | 500           |
> ...



Gruß
Iron Monkey


----------



## SlaterB (13. Apr 2010)

hmm, bei google finde ich häufiger 'NOT NULL AUTO_INCREMENT', 
bringt das was anderes, vielleicht neue Fehlermeldung beim einfügen?

so richtig helfen kann ich dabei aber leider nicht, habe nichtmal eine entsprechende DB zum testen, MySQL?
MySQL :: MySQL 5.1 Reference Manual :: 3.6.9 Using AUTO_INCREMENT


----------



## Iron Monkey (13. Apr 2010)

SlaterB hat gesagt.:


> hmm, bei google finde ich häufiger 'NOT NULL AUTO_INCREMENT',
> bringt das was anderes, vielleicht neue Fehlermeldung beim einfügen?
> 
> so richtig helfen kann ich dabei aber leider nicht, habe nichtmal eine entsprechende DB zum testen, MySQL?
> MySQL :: MySQL 5.1 Reference Manual :: 3.6.9 Using AUTO_INCREMENT



Mist, habe noch vergessen, zusätzlich zu schreiben, mit welcher Datenbank ich benutze! Ich benutze HSQLDB.jar !

So "INTEGER DEFAULT 0 NOT NULL AUTO_INCREMENT" hat auch nichts geholfen!

Ich suche gerade im Google weiter!

Gruß
Iron Monkey


----------



## Gast2 (13. Apr 2010)

Warum denn auch DEFAULT 0?

Versuch es mal mit "INTEGER NOT NULL AUTO_INCREMENT"


----------



## Iron Monkey (13. Apr 2010)

fassy hat gesagt.:


> Warum denn auch DEFAULT 0?
> 
> Versuch es mal mit "INTEGER NOT NULL AUTO_INCREMENT"



OK, habe ich soweit berichtigt. Trotzdem wird in der Ausgabe nur die 0 angezeigt! Warum wird die ID nicht hochgezählt?

Ausgabe:


> +---------------+---------------+---------------+---------------+---------------+---------------+
> | ID            | DATUM         | VON           | BIS           | PAUSE         | ARBEITSMINUTEN|
> +---------------+---------------+---------------+---------------+---------------+---------------+
> | 0             | 2010-04-13    | 08:00         | 17:00         | 30            | 500           |
> ...




Funktion für die Ausgabe:

```
private static final void printTableContent() throws SQLException
	{
		if( DEBUG )
		{
			if( statement == null )
			{
				if( DEBUG )
					System.out.println( "Datenbank ist nicht geöffnet!" );

				return;
			}

			if( !EXIST_TABLE )
			{
				if( DEBUG )
					System.out.println( "Die Tabelle existiert nicht!" );

				return;
			}
			
			if( rs == null )
			{
				if( DEBUG )
					System.out.println( "Die Datenbank-Abfrage wurde nicht ausgeführt!" );

				return;
			}
			
			// Get meta data:
			ResultSetMetaData rsmd = rs.getMetaData();
			int i, n = rsmd.getColumnCount();

			// Print table content:
			for (i = 0; i < n; i++)
				System.out.print("+---------------");

			System.out.println("+");

			for (i = 1; i <= n; i++)
				// Attention: first column with 1 instead of 0
				System.out.print("| " + extendStringTo14(rsmd.getColumnName(i)));

			System.out.println("|");
			for (i = 0; i < n; i++)
				System.out.print("+---------------");

			System.out.println("+");
			while (rs.next())
			{
				for (i = 1; i <= n; i++)
				{
					// Attention: first column with 1 instead of 0
					if( rsmd.getColumnType( i ) == Types.INTEGER )
						System.out.print( "| " + extendStringTo14( String.valueOf( rs.getInt(i) ) ) );
					else if( rsmd.getColumnType( i ) == Types.DATE )
						System.out.print( "| " + extendStringTo14( rs.getDate(i).toString() ) );
					else
						System.out.print( "| " + extendStringTo14( rs.getString(i) ) );
				}

				System.out.println("|");
			}

			for (i = 0; i < n; i++)
				System.out.print("+---------------");

			System.out.println("+");
			
			rsmd = null;
		}
	}
	
	// Extend String to length of 14 characters
	private static final String extendStringTo14( String s )
	{
		if( null == s )
			s = "";

		final String sFillStrWithWantLen = "              ";
		final int iWantLen = sFillStrWithWantLen.length();
		final int iActLen  = s.length();

	    if( iActLen < iWantLen )
	    	return (s + sFillStrWithWantLen).substring( 0, iWantLen );

	    if( iActLen > 2 * iWantLen )
	    	return s.substring( 0, 2 * iWantLen );

	    return s;
	}
```

Gruß
Iron Monkey


----------



## TuningGuide007 (2. Sep 2010)

HSQLDB kennt (bei mir / bisher) AUTO_INCREMENT nicht. Versuch es mit CREATE TABLE ... (id INTEGER IDENTITY, ...


----------

