# hsqldb Befehle in Java



## Corre (30. Mrz 2005)

Hallo! 
Ich muss in Java ein Verwaltungssystem programmieren und hab mit Hsqldb so meine Schwierigkeiten: 

also Tabelle anlegen: 

```
rs =stmt.executeQuery(
	"CREATE TABLE musi (status VARCHAR(10),name VARCHAR(20),autor VARCHAR(20))");
```

Füllen: 

```
stmt.executeUpdate("INSERT INTO musi (status,name,autor)VALUES ('verfügbar','"+ neu.titel+ "','"+neu.Autor+ "'') ");
```
wobei neu ein Objekt vom Typ Item ist und aus Titel, autor besteht.

das erzeugen einfügen drucken funktioniert ja schon ganz gut  aber
So zu den Problemen: Diese funktionieren alle nicht, wieso das möcht ich wissen : 


```
rs = stmt.executeQuery("SELECT titel FROM musi");

stmt.executeQuery("DELETE * FROM musi WHERE titel=neu.titel");

rs = stmt.executeQuery("SELECT * FROM musi WHERE param=autor");
```
Sprich, löschen, sortieren, suchen, und teilweises select funktionieren nicht ??? 


Jemand ne Lösung für das Problem ? 
danke
mfg
Corre


----------



## Bleiglanz (30. Mrz 2005)

deine Tabelle musi hat keine Spalte "titel" und auch keine Spalte "param"


----------



## Corre (30. Mrz 2005)

Oke danke das war ne blöde Sache aber wenn ich folgendes mache: 

```
rs = stmt.executeQuery("SELECT name FROM musi");
```
dann bekomm ich nur die erste Zeile nicht die gesamte Spalte ? muss diese durchlaufen werden

```
stmt.executeQuery("DELETE * FROM musi WHERE name=Hase");
rs = stmt.executeQuery("SELECT * FROM musi WHERE name=Sepp");
```
Funktioniert leider auch nicht.


----------



## KSG9|sebastian (30. Mrz 2005)

HSQL kenn ich nicht wirklich, aber ich denk mal das es ähnlich ist wie MySQL.

1.) Bei DELETE gibt es kein "DELETE * FROM". Die Syntax ist
"DELETE FROM <tabelle> WHERE <feld>=<wert>" 

Wenn du den Teil von WHERE an weglässt, dann wird die ganze Tabelle leer geräumt

2.) Was bitte ist neu.titel? Seh ich da ein Leerzeichen nach dem neu. ?

3.) Was ist param, was ist autor ? Häng mal die Tabellennamen vor deine Felder 

"SELECT tabelle.feldA, tabelle.feldB FROM tabelle"

oder

"SELECT t.feldA, t.feldB FROM tabelle t"


----------



## KSG9|sebastian (30. Mrz 2005)

Strings muss man maskieren

WHERE name = 'test123'

DELETE * FROM gibt es nicht, siehe meinen ersten Post


----------



## Corre (30. Mrz 2005)

danke dir 
neu is ein objekt der Klasse Item, Item neu = new Item("Hase","Janosch");

```
stmt.executeUpdate("DELETE FROM musi WHERE name='Hase'");
```
das funktioniert jetzt prima, ich möchte jedoch das Hase aus dem Item mitttels neu.name auslesen ! 

```
stmt.executeUpdate("DELETE FROM musi WHERE name=neu.name");
```
dies geht leider nicht?


----------



## Corre (30. Mrz 2005)

das Problem könnte doch das folgende sein: 

Wenn ich direkt mache mit 

```
stmt.executeUpdate("DELETE FROM musi WHERE name='Hase'");
```
dann hat er seine ' ' und ist zufrieden, wenn ich jedoch das Item auslese hat er doch die " " : 

```
String del=neu.name;
stmt.executeUpdate("DELETE FROM musi WHERE name=del");
```
Jemand ne Ahnung wie das zweite funktionieren könnte ?


----------



## KSG9|sebastian (30. Mrz 2005)

ja, so:

stmt.executeUpdate("DELETE FROM musi WHERE name="neu.name); 

Das was du gemacht hast ist ähnlich wie das:


```
String text = "Das ist Text";

System.out.println("text");  //Ausgabe: text
```

Das was du gemacht hast geht nur in PHP. Wenn du in Java Variablen o.ä. ausgeben willst, dann warst du sie nicht in Anführungszeichen schreiben, ansonsten wird das ganze zu nem String.

Immer so:


```
String text = "Das";
String textZwei = "ein";
String ende = "!";

System.out.println(text + " ist " + textZwei + " Text " + ende);
//Ausgabe: Das ist ein Text !
```


----------



## Bleiglanz (30. Mrz 2005)

nimm ein preparedStatement, oder für anfänger


```
String del=neu.name;
stmt.executeUpdate("DELETE FROM musi WHERE name='+del+'");
```


----------



## Corre (30. Mrz 2005)

das alte hät ich nur hab ich wieder eine Sache: Also...

Ich möchte je nachdem was param gerade ist (also name,autor,isbn) eine der unteren Abfrage machen und in rs speichern nur wie kann ich eine Abfrage machen? Weil alle zu machen geht nicht da hab ich dann nur die letzte. 

```
public void search(String param)  {

	 	rs = stmt.executeQuery("SELECT * FROM musi WHERE name='"+param+"'");
		
		rs = stmt.executeQuery("SELECT * FROM musi WHERE autor='"+param+"'");
			
		rs = stmt.executeQuery("SELECT * FROM musi WHERE isbn='"+param+"'");

}
```
Wie kann ich da ne If - Anweisung ansetzen, sodass wenn der name = param ist dies in rs gespeichert wird und die andren nicht, usw. 
Wenn ich nur eine verwende als nur nach isbn suchen kann dann funktionierts nämlich.

danke


----------



## Bleiglanz (30. Mrz 2005)

```
sql = new stringbuffer("SELECT * FROM MUSI WHERE 1=1");
if(...) sql.append(" AND name='").append(param).append("' ");
if(...) sql.append(" AND autor='").append(param).append("' ");
if(  ) sql.append(" AND isbn='").append(param).append("' ");
```


----------



## Corre (1. Apr 2005)

kannst du mir das einwenig erläutern ? danke

Ich möchte ja das Ergebnis der Abfrage in einen ResultSet speichern, weil meine PrintFunktion diese dann ausgibt. 
Wie kann ich da die If-Abfrage (Bedigung) ansetzen?

danke


----------



## Bleiglanz (1. Apr 2005)

die Frage ist, woher du überhaupt weisst, ob param jetzt ein name, ein autor oder eine isbn ist, nach der du suchen willst


----------



## KSG9|sebastian (1. Apr 2005)

beschreib doch dein problem genauer


```
sql = new stringbuffer("SELECT * FROM MUSI WHERE 1=1"); 
if(...) sql.append(" AND name='").append(param).append("' "); 
if(...) sql.append(" AND autor='").append(param).append("' "); 
if(  ) sql.append(" AND isbn='").append(param).append("' ");
```

Also, mit der Zeile


> sql = new stringbuffer("SELECT * FROM MUSI WHERE 1=1");



wird ein StringBuffer erzeugt der den Text "SELECT * FROM MUSI WHERE 1=1" enthält. 

Die If-Abfragen dannach hängen nur noch Text an den StringBuffer dran, je nachdem welche bedingung zutrifft.


----------



## Guest (1. Apr 2005)

also: egal ob name,autor oder isbn der param gerade ist, will ich in der db nach param suchen und wenn er einen param findet soll er die zeile ausgeben. 

Es muss dann in ein ResultSet gespeichert werden, da dies meine Print funktion dann drucken kann. 

klaro ?


----------



## Bleiglanz (1. Apr 2005)

na wenns egal ist

```
sql = new stringbuffer("SELECT * FROM MUSI WHERE 1=1");
if(null!=param && param.length()>0){
 sql.append(" OR name='").append(param).append("' ");
 sql.append(" OR autor='").append(param).append("' ");
 sql.append(" OR isbn='").append(param).append("' "); 
}
```


----------



## Guest (2. Apr 2005)

oke danke aber wie kann ich den stringbuffer dann in ein ResultSet wandeln ? ich möchte eben das das Ergebnis in einem Resultset drin ist. ?


----------



## Bleiglanz (2. Apr 2005)

stmt.executeQuery(sql.toString());


----------



## Guest (2. Apr 2005)

hm was bedeutet WHERE 1=1 ? 

Ausgabe sind alle Einträge nicht der Gesuchte ? 

Will einfach nur was suchen in der Db und die Zeile dann ausgeben ?


----------



## Guest (4. Apr 2005)

donk hat sich erledigt !


----------

