# SQL Exception"Ungültiger Spaltenindex"



## Shusi (15. Jul 2014)

Moin Moin ihr Lieben!

So langsam verzweifle ich hier. 
Ich habe nun Ewigkeiten mit Google verbraucht und auch sehr viel gefunden, nur leider nichts passendes :/

Hier erstmal der wichtige Code:

```
sql = "INSERT INTO Projekt (projekt_id, name, anfang, ende, beschreibung) "
					+ "values (?, '?', ?, ?, '?')";
			
			System.out.println("Einzufügendes Projekt:");
			p.setId(projekt_id);
			System.out.println(p);
			pstmt = connection.prepareStatement(sql);
			pstmt.setInt(1, projekt_id);
			pstmt.setString(2, p.getName());
			pstmt.setDate(3, new Date(p.getAnfang().getTimeInMillis()));
			pstmt.setDate(4, new Date(p.getEnde().getTimeInMillis()));
			pstmt.setString(5, p.getBeschreibung());
			pstmt.executeUpdate();
```

sql ist dabei ein String 

Was will ich machen? Ich will eine neues Projekt p in meine Oracle DB schreiben. 
Das Statement ist richtig (habe es direkt auf der DB getestet). 
Die projekt_id hole ich mir über eine sequence, das funktioniert auch wunderbar.
Das projekt gebe ich mir auch vorher auf die Konsole aus, da sind alle Daten 1a drin.

dennoch bekomme ich folgende Exception:

```
SQL Exception!
java.sql.SQLException: Ungültiger Spaltenindex
	at oracle.jdbc.driver.OraclePreparedStatement.setDateInternal(OraclePreparedStatement.java:7001)
	at oracle.jdbc.driver.OraclePreparedStatement.setDate(OraclePreparedStatement.java:6988)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.setDate(OraclePreparedStatementWrapper.java:166)
	at dao.ProjektDAOImpl.insertProjekt(ProjektDAOImpl.java:95)
	at dao.Main.main(Main.java:32)
```

Angezeigt wird der Fehler auf der Line, in der ich das Ende-Datum setze (Zeile 11 im Ausschnitt). 
Das ist auch der Punkt, der mich so verwirrt.. Das anfangs-datum funktioniert  - ende nicht mehr.
Das Datum an sich ist ein GregorianCalendar den ich per "getTimeInMillis()" auf ein SQL-Date umwandle.

Vll sehe ich ja den Wald vor lauter Bäumen nicht, aber ich weiß keinen Rat mehr.

Vielen Dank schonmal, dass Ihr euch die Zeit nehmt, den Quatsch zu lesen


----------



## Joose (15. Jul 2014)

Shusi hat gesagt.:


> ```
> sql = "INSERT INTO Projekt (projekt_id, name, anfang, ende, beschreibung) "
> + "values (?, '?', ?, ?, '?')";
> ```
> ...



In einem PreparedStatement solltest du keine 
	
	
	
	





```
'
```
 für die Platzhalter! Sobald du den Wert setzen willst werden diese automatisch hinzugefügt (wo benötigt).

So wie du es aktuell hast kannst du nur max 3 Werte setzen.
Durch die 
	
	
	
	





```
'
```
 hast du die anderen beiden Werte schon gesetzt (
	
	
	
	





```
-> ?
```
). Daher funktioniert auch das Setzen des Anfangs Datum noch.


----------



## Shusi (15. Jul 2014)

Vielen Dank!
Das war wohl der Fehler..

auf die Idee bin ich nicht gekommen!


----------

