# Variable Werte in einem SQL Statement?



## Java Light (4. Sep 2006)

Hallo 

Ist es möglich mit einem SQL statement eine Variable zu übergeben? Etwa so: 


```
Room room1 = new Room;
description = room1.getDescription();
executeUpdate(1, 150, 'Doppelzimmer', 0, description)
```

Leider funktioniert diese Variante bei mir nicht, welche Möglichkeiten gibt es da?


Danke für Eure Unterstützung...


----------



## AlArenal (4. Sep 2006)

Ich würds statt mit Code-Vandalismus mal mit RTFM probieren.. Du kannst dir doch nicht irgendwelche Befehle ausdenken und dich dann wundern, dass sie nicht funktionieren..

Im Netz, im Forum, in unseren FAQs dürftest du totgeschmissenw erden mit JDBC-Tutorials und Codefetzen.


----------



## Java Light (4. Sep 2006)

Entschuldigung...ich habe nicht alles in meinem Statement geschrieben, habe ein Teil vergessen:

Natürlich lautet meine Codezeile folgendermassen:


```
Room room1 = new Room; 
description = room1.getDescription(); 
executeUpdate(insert into room values (1, 150, 'Doppelzimmer', 0, description);  // Korrektur
```

Tut mir schrecklich leid...leider beantwortet dies meine Frage noch nicht.[/code]


----------



## AlArenal (4. Sep 2006)

Vielleicht solltest du mal nen Blick auf die Fehlermeldung werfen, die du beim Kompilieren bekommst.. Vielleicht geht dir dann ein Licht auf.


----------



## DP (4. Sep 2006)

poste mal komplettencode. was funktioniert wo nicht?

im 2. code fehlt schonmal ne geschlossene klammer usw. pp


----------



## AlArenal (4. Sep 2006)

Von Anführungszeichen ganz zu schweigen


----------



## trmx (4. Sep 2006)

vielleicht so


```
executeUpdate("insert into room values (1, 150, 'Doppelzimmer', 0, '" + description + "')");
```

 :meld: Für Parameter sind PreparedStatements besser!


----------



## Java Light (4. Sep 2006)

Hallo zusammen

Besten Dank für Eure Antworten, leider hat es nicht funktioniert. Hier nun mein gesamter Code:


```
package ch.essec.sherin;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

// javac HelloJDBC.java
// java -classpath /home/marnitz/ojdbc14.jar:/home/marnitz/ HelloJDBC
// jdbc:oracle:thin:@deanston.cs.uni-magdeburg.de:1521:tix

public class DatabaseRoom {
	
	private static String query = null; // Anfragestring
	private static Connection connection = null; //Verbindung zur Datenbank
	private String description;
	
	
	
	/**
	 * Oeffnen einer Datenbankverbindung
	 */
	public void initDBConnection(){
		String url ="jdbc:mysql://localhost/hotelreservationssystem"; //URL zur Datenbank
		String username = "root"; //Nutzername
		String password = ""; //Passwort
				
		// Holen des SQL-Treibers
		try {
			Class.forName("com.mysql.jdbc.Driver");
		}
		catch(ClassNotFoundException e1) {
			e1.printStackTrace();
			System.exit(1);
		}
		//Erstellung einer Verbindung zur Datenbank
		try {
			connection = DriverManager.getConnection(url, username, password);
			//Ausfuehren einer DB-Anfrage
			executeQuery();
			//Schliessen der DB-Verbindung
			connection.close();
		}catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * Ausfuehrung der DB-Anfrage
	 */
	public void executeQuery(){
		try {
			/**
			 * Hier wird die DB-Anfrage gesetzt!!!!
			 */
			Room room = new Room();
			description = room.getRoomDescription();
			query = "insert into room VALUES (8, 150, 'Doppelzimmer', 0, " + description + ")"; 
			//query = "select * from cocktail"; 
			//Erzeugung eines Statements
			Statement statement = connection.createStatement();
			//Holen Ergebnismenge der Anfrage
			statement.executeUpdate(query);
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
}
```

Übrigens wird mir folgende Fehlermeldung ausgegeben:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Zimmer)' at line 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:3118)
	at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1313)
	at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1232)
	at ch.essec.sherin.DatabaseRoom.executeQuery(DatabaseRoom.java:66)
	at ch.essec.sherin.DatabaseRoom.initDBConnection(DatabaseRoom.java:41)
	at ch.essec.sherin.RoomErfassung.main(RoomErfassung.java:10)
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
	at com.mysql.jdbc.Connection.checkClosed(Connection.java:1903)
	at com.mysql.jdbc.Connection.createStatement(Connection.java:2962)
	at com.mysql.jdbc.Connection.createStatement(Connection.java:2944)
	at ch.essec.sherin.DatabaseRoom.executeQuery(DatabaseRoom.java:64)
	at ch.essec.sherin.RoomErfassung.main(RoomErfassung.java:11)

Auch wenn ich das Manual anschaue, finde ich keinen Fehler...was mache ich bloss falsch?

Falls mir jemand helfen könnte...Besten Dank...


----------



## SlaterB (4. Sep 2006)

dein erster Fehler ist schon mal dir weder die Tabelle in der Datenbank noch die Anfrage anzuschauen,

hinter jeder Query, die noch nicht sicher funktioniert gehört ein 
System.out.println(query);

ich nehme mal an die Query lautet
"insert into room VALUES (8, 150, 'Doppelzimmer', 0, Zimmer)"

und in einem solchen Fall ist dein gesamtes Programm egal,
denn diese Query würde auch nicht funktionieren, wenn du sie direkt eintippen würdest, statt per Variable,

wie man Strings eingibt weißt du doch anscheinend:
da müssen einfache Anführungsstriche rum wie bei 'Doppelzimmer'


----------

