# Mysql speichert keine 0 alls String



## BitBoy (25. Mai 2012)

Hallo zusammen,
bin echt am rotieren gerade ;(

Ich versuche einen String in eine mysql DB zu speichern. Dieser String enthält entweder 0 o. 1.
Diese represntieren die Auswahl von Checkboxes, die ich nacher mittels einer Schleife wieder in true o. false umwandle.Das bei einer Zahl keine 0 am Anfang sein kann ist mir klar aber bei einem String.

D.h. wenn er 0111 speichern soll, speichert er nur 111, im Programm blickt ers mit der Null.
Habe versch. Einsellungen probiert varchar, text, Binary. Weis nicht mehr weiter.
Was hab ich evtl. übersehen ???
Danke schon mal... (ist bestimmt wieder irgend ein Blödsinn, wo ich wieder nix gedacht hab )


----------



## c_sidi90 (25. Mai 2012)

Dann scheint es mir allerdings am Code zu hapern. Ich hatte noch nie Probleme gehabt, 0 als String in eine als Varchar definierte Spalte zu speichern.

Poste mal die Stelle im Code, an der du versuchst den Datensatz in der DB zu speichern.


----------



## Fant (25. Mai 2012)

Dann poste mal den relevanten Code. Von der Art und Weise der Texteingabe, über das Auslesen des Strings bis hin zum Speichern in der DB. Ich kann jedenfalls problemlos den String '0111' abspeichern...

Gruß Fant


----------



## BitBoy (25. Mai 2012)

```
public void setformat(Boolean btag,Boolean bstunde,Boolean bminute,Boolean bsekunde){
	this.btag=btag;
	this.bstunde=bstunde;
	this.bminute=bminute;
	this.bsekunde=bsekunde;
}//setformat
```

Hier setzt er das Format... (Klasse heisst meinezeit zum nachvollziehen)

```
public String getformat(){
	String format;
	 if(btag){
		format="1"; 
	 }else{
		format="0"; 
	 }
	 if(bstunde){
		format=format+"1"; 
	 }else{
		format=format+"0"; 
	 }
	 if(bminute){
		format=format+"1"; 
	 }else{
		format=format+"0"; 
	 }
	 if(bsekunde){
		format=format+"1"; 
	 }else{
		format=format+"0"; 
	 }

	return format;
	
}//getformat
```
Ruft das Format auf u. wandelt es (denke ich zumindest in einen String um)

... und hier fügt er es ein in die DB

```
String query="UPDATE spielref SET zeitsetting="+meinezeit.getformat()+" WHERE prozid =" + puid;
                    try {
        				stmt.executeUpdate(query);
        			} catch (SQLException e1) {
        				// TODO Auto-generated catch block
        				e1.printStackTrace();
        			}
```


----------



## BitBoy (25. Mai 2012)

Naja, soviel mehr passiert da nicht mehr ich hab die Checkbox


```
String[] checkstr={"Tag","Stunde","Minute","Sekunde"};
		   final Checkbox[] checkf = new Checkbox[4];
		   
		   for(int i=0;i<4;i++){
			   checkf[i]= new Checkbox(checkstr[i],bformat[i]);
			   checkf[i].setFont(zeitf);
			   choice.add(checkf[i]);
		   }//For
//...........dann kommt noch
meinezeit.setformat(checkf[0].getState(), checkf[1].getState(), checkf[2].getState(), checkf3].getState());

//dann währ mer wieder bei
public void setformat(Boolean btag,Boolean bstunde,Boolean bminute,Boolean bsekunde){
    this.btag=btag;
    this.bstunde=bstunde;
    this.bminute=bminute;
    this.bsekunde=bsekunde;
}//setformat 

//getformat holt die Werte wieder u. macht den String siehe oben
```
Feld in DB Einstellung ist/sind

Type VARCHAR
Länge 4
Standard kein
Attribute keine (hab auch Binary probiert)
Null nein
:bahnhof:


----------



## Fant (25. Mai 2012)

Hast du mal

```
String query="UPDATE spielref SET zeitsetting='"+meinezeit.getformat()+"' WHERE prozid =" + puid;
```
probiert? (Habs nicht getestet...)

Gruß Fant


----------



## XHelp (25. Mai 2012)

Mach mal 
	
	
	
	





```
'
```
 um deinen String drumherum oder verwende PreparedStatement.


----------



## c_sidi90 (25. Mai 2012)

Du setzt deine Werte in deinem Update auch keine SingleQuotationMarks voraus.

EDIT: Verdammt ich bin zu langsam :lol: 3fach hält besser


----------



## SlaterB (25. Mai 2012)

du übergibst eine Zahl, 055 wird als Zahl 55 interpretiert und dann netterweise in einen String umgewandelt,
gleich eine Fehlermeldung wäre auch nicht zu verurteilen,

verwende PreparedStatement und setze deinen String mit setString() oder füge selber einfache Anführungszeichen an,
dann ist es von Anfang an eine Zeichenkette, keine Zahl


----------



## nillehammer (25. Mai 2012)

Wenn Du Strings an eine DB übergibst, mach mal einfache Anführungszeichen *' (das Ding auf der Taste mit dem Lattenzaun, also Shift-#)* drum. Ändere also Dein Statement wie folgt:

```
String query="UPDATE spielref SET zeitsetting='"+meinezeit.getformat()+"' WHERE prozid =" + puid;
```
[EDIT]
Wieder zu langsam. Und SlaterB hat Recht, PreparedStatement ist besser, weil typsicherer, resistent gegen SQL-Injection, ergeben schöneren Code
[/EDIT]


----------



## BitBoy (25. Mai 2012)

:toll::applaus: Ihr seit einfach spitze Männer :applaus::toll:

super vielen Dank, habt mir (und meinemUmfeld, den Tag gerettet )
Wie vermutet, wieder irgend eine Kleinigkeit.....


----------



## BitBoy (25. Mai 2012)

@nillehammer


> ' (das Ding auf der Taste mit dem Lattenzaun, also Shift-# drum.



nett erkärt, habs lustigerweise, beim ersten Standard füllen mit '1111' au so gemacht.
Erste DB Gehversuche.
Danke u. Gruß


----------

