# Problem: Prepared Statement (Insert) funktioniert nicht.



## derFuxx (7. Jan 2009)

Hi,

ich habe folgendes Problem, bei dem mir hoffentlich jemand helfen kann.

Ich habe in einer Klasse folgenden Code, der mir ein PreparedStatement vorbereitet, welches Klassenweit zur Verfügung steht:


```
private static void setPrepWriteAttributeValue(){
		String AttributeValue = "insert into tbl_company (company, round, ?)" +
								"Values(?,?,?)";
		try {
			establishConnection();
			prepWriteAttributeValue = con.prepareStatement(AttributeValue);
		} catch (SQLException ex) {
			System.err.println("SQLException: " + ex.getMessage());
		}
	}
```

Mit folgendem Code möchte ich nun die Abfrage ausführen:

```
public static void setAttributeValue(int company, int round, String attributeName, double attrValue){
		try {			
			System.out.println(attributeName);
			prepWriteAttributeValue.setString(1,attributeName);
			prepWriteAttributeValue.setInt(2,company);
			prepWriteAttributeValue.setInt(3,round);
			prepWriteAttributeValue.setDouble(4,attrValue);
			boolean test;
			test=prepWriteAttributeValue.execute();
			System.out.println(test);
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
```


Leider funktioniert dies nicht und weiß nicht woran es liegt. Folgende Fehlermeldung erscheint:
[Microsoft][ODBC Microsoft Access Driver] Die INSERT INTO-Anweisung enthält folgenden unbekannten Feldnamen: 'Pa_RaM000'. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und führen Sie dann die Operation nochmals aus.

Wie daran zu sehen verwende ich eine Access MDB zur Datenhaltung.

Ich hoffe mir kann jemand bei dem Problem helfen 
Danke im Voraus.


----------



## Niki (7. Jan 2009)

Ich glaube ein Fragezeichen kann nicht als Spaltenplatzhalter verwendet werden, sondern wirklich nur für Werte. Was spricht gegen eine Methode die dir jedes mal ein neues PreparedStatement zurück liefert und du der Methode den SpaltenNamen mit gibst? Das Statement sollte danach wieder geschlossen werden sonst gibts ein Ressourcenproblem


----------



## derFuxx (7. Jan 2009)

Hmmh,

schade aber hatte inzwischen fast schon gedacht, dass der Fehler daran liegt, weil ohne den Spaltenplatzhalter hat es im Nachhinein funktioniert.

Jedes mal ein neues Statement kreieren bringt leider nichts, denke ich.
Da könnte ich denke mal, das ganze auch direkt über ein normales Statement ausführen.

Trotzdem danke.


----------



## SlaterB (7. Jan 2009)

du kannst in einer Map
String -> PreparedStatement
die Statements pro Attribut abspeichern


----------

