# Inhalt einer Variable in Datenbank schreiben



## Proggy (22. Nov 2006)

Hallo,
möchte den Inhalt einer Variablen 'punktestand' in die Tabelle 'highscores' in das Feld 'score' schreiben:

```
try{
		stmt = cn.createStatement();
		rs=stmt.executeQuery("INSERT INTO highscores(score) VALUES (punktestand)");}
		
	        catch(Exception e){;}
```

klappt aber nicht. punktestand ist vom Typ integer.

Kann mir jemand helfen? Danke!!!

Gruß
Andreas[/code]


----------



## bronks (22. Nov 2006)

Kein Wunder! Schreibe zuerst Dein SQL in einen String. Dann gib den String aus und Du wirst sofort sehen was da nicht passt.


----------



## Proggy (22. Nov 2006)

Danke, aber das bringt mich nicht weiter. Habe mein SQL-Statement in eine String-Variable geschrieben, sieht dort genauso aus.


```
String command="INSERT INTO highscores (score) VALUES (punktestand)";
```


----------



## bronks (22. Nov 2006)

Schade! Eigentlich hätte ich gedacht, daß Dir der Fehler sofort ins Auge springt.

Unter der Annahme, daß Punktestand = 45 ist, müßte das SQL so aussehen, damit die DB etwas damit anfangen kann:


```
INSERT INTO highscores (score) VALUES (45)
```


Damit Deine Variable berücksichtig wird: 

```
String command="INSERT INTO highscores (score) VALUES (" + punktestand.toString + ")";
```

Eleganter geht es mit PreparedStatement. Wenn Du das hier als Suchbegriff eintippst wirst Du mit Infos und Beispielen erschlagen.


----------



## Proggy (22. Nov 2006)

Ach so, ja, hätte ich sehen müssen, aber das Feld score ist doch vom Typ int. Wieso muss ich punktestand dann in einen String konvertieren?

Jetzt meckert er folgendes:

The primitive type int of punktestand does not have a field toString

Mache ich zwei Klammern dahiner:

```
rs=stmt.executeQuery("INSERT INTO highscores (score) VALUES (" + punktestand.toString() + ")");
```

dann meldet er:
cannot invoke toString on the primitive type int


----------



## bronks (22. Nov 2006)

Mit dem toString() wollte ich nur verdeutlichen, daß an die DB ein nackter String übergeben wird. Da meckert er jetzt berichtigt, weil primitive Typen etwas primitiver behandelt werden. Lass das toString, bei dem ich mich nochdazu verschriebne habe, einfach weg, dann müßte es klappen.


```
String command="INSERT INTO highscores (score) VALUES (" + punktestand + ")";
```


----------



## Proggy (22. Nov 2006)

Ach sooooooooooo, ja, habe mich auch schon gewundert. Ja, dann iss klar jetzt.

ich danke Dir!!!


----------



## Proggy (22. Nov 2006)

Hallo,

da habe ich mich wohl zu früh gefreut, der schreibt nix in die DB.

die Tabelle hat vier Felder:
nick    typ varchar
score  typ int
datum typ date
ort      typ varchar


Jetzt habe ich das Ganze mal so geändert:

```
rs=stmt.executeQuery("INSERT INTO highscores (nick,score,datum,ort) VALUES ( ," + 333 + ", , )");
```


funzt aber net. Wo liegt bloß mein Denkfehler?


Die DB liegt auf dem Server meine Providers. Weiter oben lese ich eine Tabelle aus, das klappt. An der Connection kann's also nicht liegen.[/code]


----------



## bronks (22. Nov 2006)

Lass Dir bei einer Exception den Stacktrace ausgeben und davor immer den SQL, sonst findest du Deine Fehler nie.

Ok, einmal noch, aber dann blätterst selbst im SqlHandbuch. 

Dein SQL ist falsch. Du mußt entweder nur die Felder angeben, welche Du gefüllt haben willst oder bei den Values null oder 0 füllen lassen, wobei null für das betroffene Feld erlaubt sein muss.


----------



## SlaterB (22. Nov 2006)

vielleicht dürfen die anderen Felder nicht null sein,
hast du die Tabellen-Definition?
CREATE TABLE ...


----------



## Proggy (23. Nov 2006)

Bin jetzt mal abgetaucht in die statement.class. Dort springt er bei der Ausführung der insert-into-abfrage in  die 
Funktion, die so auskommentiert ist:


```
Checks if the given SQL query with the given first non-ws char is a DML
	 * statement. Throws an exception if it is.
```
Aber ich kann damit nix anfangen. was ist mit non-ws gemeint?

DML steht doch für Data Manipulation Language, oder?

Hoffe, Ihr Profis  :wink:  könnt mir da helfen. Habt Dank!


----------



## Kite (23. Nov 2006)

Also ich hatte auch dmit erst ein problem, und zwar wenn ich in der tabelle ein ty date anlege und ich es aus einem textfeld heraus ´lese ist es erst ein string, mit hilfe einer funktion wird es in ein sql datum umgeschrieben, speichern kann ich es aber nur, wenn es nicht das format 00-00-0000 hat, sonder ich vergebe einen standart wert z.b. 01.01.1900 dann funktioniert es erst. vielleicht hilft das ja auch ein bischen weiter


----------



## Proggy (23. Nov 2006)

Es muss stmt.executeUpdate statt stmt.executeQuery heissen.

Und das habt Ihr nicht gewusst??? Ihr seid gemein  :wink:  :wink:  :wink: 

Wolltet nur, daß ich lerne, 'nen Fehler zu finden. Das vergess ich Euch nicht, so!!! :x 


Lieber Gruß

ein genervter Proggy


----------



## bronks (23. Nov 2006)

Proggy hat gesagt.:
			
		

> ... Und das habt Ihr nicht gewusst??? ...


Gewußt schon, aber dafür total übersehen.  :shock:


----------

