# Kann Datensatz nicht richtig eintragen. autoincrement Eintrag ?!



## NetPerformance (19. Februar 2006)

Hallo, 

Ich versuche per PreparedStatement meine Anweisung vorzubereiten um anschließend ein Datensatz in der Datenbank einzutragen.

Das Anlegen der Tabelle hat ohne Probleme funktioniert:

```
// Neue Tabellen anlegen 			
Statement create = con.createStatement();
create.executeUpdate("CREATE TABLE abteilung (id INT(10), name VARCHAR(50), PRIMARY KEY(id))");
```

Wichtig: das Feld id sollte per *autoincrement* gefüllt werden.


```
// Anweisungen vorbereiten und Datensatz eintragen
PreparedStatement insert;

insert = (PreparedStatement) con.prepareStatement("INSERT INTO abteilung VALUES(?,?)");
insert.setInt(1,1);
insert.setString(2,"marketing");
insert.execute();
```

*insert.setInt(1,1);* <-- ich habe hier trotz autoincrement 1,1 angegeben. Wie wird die Zeile richtig geschrieben ? setint(?,1)

Mit der Eingabe von 1,1 sieht der Eintrag folgender maßen aus:
http://www.netperformance.de/test/mysql3.jpg

Statt id=1 wird id=196869 angezeigt. Ich gehe davon aus, dass der falsche Eintrag mit der Tatsache zusammen hängt, dass ich für ein autoincrement Feld ein Wert eingegeben habe. was glaubt ihr ? 

Die Symbole hinter marketing kann ich nicht erklären.. 

Würde mich über eine Antwort freuen.. 

Gruß
Aaron


----------



## RedWing (19. Februar 2006)

Hallo,
was für ein Datenbanksystem verwendest du denn?

Also für mysql sollte das gehen:


```
// Anweisungen vorbereiten und Datensatz eintragen
PreparedStatement insert;

insert = (PreparedStatement) con.prepareStatement("INSERT INTO abteilung SET name='?'");
insert.setString(1,"marketing");
insert.execute();
```

id wird dann automatisch von deinem DBS inkrementiert...

Gruß

RedWing


----------



## Thomas Darimont (19. Februar 2006)

Hallo!

Wenn du autoincrement Felder in deiner Tabelle hast musst du diese beim einem DML Statement weglassen. Dabei ist zu beachten, dass du dann natürlich die Spalten liste explizit angeben musst.

Gruß Tom


----------



## NetPerformance (19. Februar 2006)

Hi..  

Es ist eine *MySQL* Datenbank. 
Aber das autoincrement funktioniert so nicht. s.h. Screenshot 

Gruß
Aaron

@Thomas: insert.setInt( ,1);  <-- so erhalte ich ein Syntax Fehler !


----------



## RedWing (19. Februar 2006)

Hallo,

has du es denn so schon versucht? 
Also ohne die Angabe des id Feldes. Siehe oben?



			
				RedWing hat gesagt.:
			
		

> Hallo,
> was für ein Datenbanksystem verwendest du denn?
> 
> Also für mysql sollte das gehen:
> ...



Gruß

RedWing


----------



## Thomas Darimont (19. Februar 2006)

Hallo!

Ich meinte das so:

```
CREATE TABLE fooaaaa(id INT NOT NULL AUTO_INCREMENT, data0 VARCHAR(32),data1 VARCHAR(32), PRIMARY KEY(id));
...
INSERT INTO fooaaaa (data0,data1) values (?,?)
```

Gruß Tom


----------



## NetPerformance (20. Februar 2006)

.. habe euch zwar jetzt verstanden ...  aber anscheinend mache ich immer noch etwas falsch.

Tabelle habe ich so angelegt:
create.executeUpdate("CREATE TABLE imobilien(id INT(10) NOT NULL AUTO_INCREMENT, name VARCHAR(32),ort VARCHAR(32), PRIMARY KEY(id))");

id
name
ort

Daher sieht meine Anfrage so aus:

PreparedStatement insert;
insert = (PreparedStatement) con.prepareStatement("INSERT INTO imobilien VALUES*(?,?)*");

// so versuche den Eintrag vorzunehmen:
insert.setString(1,"name");
insert.setString(2,"ort");

Fehlermeldung: java.sql.SQLException: Column count doesn't match value count at row 1

Was mache ich falsch ? .. sorry.. stehe bissel auf dem Schlauch.


----------



## RedWing (20. Februar 2006)

Hallo,

versuch es doch mal so:


```
INSERT INTO imobilien(name,ort) VALUES('name','ort');
```

bzw


```
insert = (PreparedStatement) con.prepareStatement("INSERT INTO imobilien(name, ort)  VALUES('?','?')");
insert.setString(1,"name");
insert.setString(2,"ort");
```

Gruß

RedWing


----------



## NetPerformance (20. Februar 2006)

Bei diese Möglichkeit


```
insert = (PreparedStatement) con.prepareStatement("INSERT INTO imobilien(name, ort)  VALUES('?','?')");
insert.setString(1,"name");
insert.setString(2,"ort");
```

erhalte ich folgende Meldung:

Fehler: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

Gruß
Aaron


----------



## RedWing (20. Februar 2006)

Sorry,
dann darfst du die ? nicht in ' einfassen...

Gruß

RedWing


----------

