Keine Aussicht mit Prepared Statement

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallöchen.

nachdem ich mich nun 4 Stunden zu tode gesucht habe, habe ich beschlossen nun zu fragen:

Ich habe eine Klasse die mir die Verbindung zu meiner Datenbank herstellt.
Diese instanziere ich bei bedarf und übergeben mein SQL Statement als String.

Nun habe ich dieses Hochkommaproblem. Wenn Texte aus einem Formularfeld ' oder " enthalten, gibt es
einen Fehler. Als Lösungsvoschlag habe ich hier dieses PreparedStatement gefunden.

Wie aber implementiere ich das? Also wie übergebe ich dieses Statement an die Klasse der Datenbankverbindung?
Hier habe ich meist nur Beispiele gefunden, in denen das PRepared Statement direkt in der Verbindungsklasse implementiert ist.

Das geht aber bei mir nicht, da ich der Klasse DB Verbindung verschiedene Statemenst übergebe und damit das setString nicht in der Verbindungsklasse verwenden kann oder? Weil ich doch jedes mal was anderes übertrage.

Ich kapier es einfach nicht. Könnt ihr mir bitte helfen?

Danke!
 
S

SlaterB

Gast
was du da machst ist schleierhaft

> da ich der Klasse DB Verbindung verschiedene Statemenst übergebe und damit das setString nicht in der Verbindungsklasse verwenden kann

kann alles mögliche bedeuten,
es gibt tausende Wege wie es funktioniert, und noch viel mehr wie es nicht nicht funktioniert,

eine Standardoperation sieht so aus:
Code:
public xy sucheBestimmtestDing(String parameter) {

   PreparedStament erzeugen mit festen SQL-String,
   Parameter einfügen
   Ergebnisse verarbeiten
}

etwas allgemeiner gerne auch

Code:
public xy sucheIrgendwas(String sql, List<String> parameter) {

   PreparedStament erzeugen mit Parameter SQL,
   alle vorhanden Parameter einfügen 
   // Aufrufer muss aufpassen, dass Anzahl stimmt
   Ergebnisse verarbeiten
}

keinerlei Probleme zu sehen
 
G

Guest

Gast
Hallo Slater alter Freund :wink:

Etwas konkreter. Hier die Klasse der ich ein SQL Statement übergebe:
Code:
public class DbVerbindungAccess {

	// Datenbank modifizieren
	public void dbUpdate(String statement) {

		try {

			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			Connection conn = DriverManager
					.getConnection("jdbc:odbc:Sternverzeichnis");
			Statement stmt = conn.createStatement();
			stmt.executeUpdate(statement);
			stmt.close();
			conn.close();

		} catch (SQLException sqle) {
			System.out.println("Verbindung ist fehlgeschlagen: "
					+ sqle.getMessage());
		}

		catch (ClassNotFoundException cnfe) {
			System.out.println("Treiber kann nicht geladen werden:"
					+ cnfe.getMessage());
		}

	}

}

Die Methode dbUpdate erwartet also ein SQL Statement vom Typ String. Ich übergebe dieser Methode die verschiedensten SQL Statements. Nun ist bei mir dieses Hochkommaproblem aufgetreten, welches ich mit einem
Prepared Statement lösen wollte. Wie aber implementiere ich dieses nun? Meiner Auffasung nach müsste ich
es doch in dieser Klasse einbauen, was aber in meinem Fall nicht geht, da es ja verschiedene SQL Statements sind.
Ich fülle doch mit setString die "?" eines PreparedStatement mit inhalt. Da der Inhalt bzw. die Form des Statements immer verschieden ist, weil es ja immer unterschiedliche SQL Statements sind kann ich doch das PreparedStatement nicht an dieser Stelle implementieren?
 
S

SlaterB

Gast
das beste wäre, wenn du generell alle Anfragen auf PreparedStatement umstellst ;)

ansonsten brauchst du eine zweite Operation

public void dbUpdatePrepared(String statement, List<String> parameter) {
}

wie oben beschrieben,


man kann da einiges tricksen, um nicht zuviel doppelt zu schreiben,
z.B. eine Operation getConnection(),
und der du

catch (ClassNotFoundException cnfe) {
System.out.println("Treiber kann nicht geladen werden:"
+ cnfe.getMessage());
}

schreiben kannst (und NIRGENDWO sonst im Programm)


anderes wie das

} catch (SQLException sqle) {
System.out.println("Verbindung ist fehlgeschlagen: "
+ sqle.getMessage());
}

läßt sich mit einfachen Mitteln vielleicht nicht überall vermeiden, ist aber ok
 
G

Guest

Gast
Hallo Slater,

also irgendwie habe ich das nicht verstanden :cry:

Hier ein Beispiel wie ich eine Anfrage an die oben gezeigte DB Verbindungsklasse sende:

Code:
package Datenbank;

import Entities.EnGesamtbestelldetails;

public class DbGesamtbestelldetails {

	public void gesamtbestelldetailsEintragen(EnGesamtbestelldetails detailDaten) {
			
		int auftragsnummer = detailDaten.getAuftragsnummer();
		String lVorname  = detailDaten.getLVorname();
		String lNachname  = detailDaten.getLNachname();
		String lStrasse = detailDaten.getLStrasse();
		int lPlz = detailDaten.getLPlz();
		String lOrt = detailDaten.getLOrt();
		String lLand = detailDaten.getLLand();
		int artikelNummer = detailDaten.getArtikelNummer();
		
		
		String statement = "INSERT INTO Bestelldetails (Auftragsnummer, LVorname, LNachname, LStrasse, LPlz,     Lort, LLand, Artikelnummer) VALUES ('"
				
				+ auftragsnummer
				+ "','"
				+ lFirma
				+ "','"
				+ lVorname
				+ "','"
				+ lNachname
				+ "','"
				+ lStrasse
				+ "','"
				+ lPlz
				+ "','"
				+ lOrt
				+ "','"
				+ lLand
				+ "','"
				+ artikelNummer
				+ "')";

		DbVerbindungAccess kundendatenEintragen = new DbVerbindungAccess();
		kundendatenEintragen.dbUpdate(statement);

	}
	
}

Die einzelnen Inhalte lese ich aus einer Arraylist und weise sie einer Variablen zu, die ich wiederum an das String Statement übergebe. Was muss ich nun tun, um aus diesem Statement ein prepared Statement zu machen, welches mir auch problemlos hochkommas in die DB einträgt, wenn ich es an die Klasse mit der DAtenbankverbindung sende?
 
S

SlaterB

Gast
so nun nicht, PreparedStatement allgemein lernt man mit Lehrbüchern, nicht mit Slater ;)
 
G

Guest

Gast
Hallo Slater,

so war es wirklich nicht gemeint. Ich habe hier das JavaBuch,
dann noch das Open Book Java.....Insel,
dann dieses Forum,
dann noch eine SQL Referenz,
und zu gute letzt noch ein recht mageres Skript aus der Uni.

Ich sitzt nun schon den ganzen Nachmittag an diesem Problem. Ich hab wirklich schon
tausendman reingeschaut (EHRENWORT) und versteh es einfach nicht :(
 
S

SlaterB

Gast
nix verstehen ist kein Argument,
ich kann ohne ein Zucken mein Leben weiterleben ohne dass du das je kapierst ;)

je mehr du dich auf die 'ich mach gar nix'-Schiene abkapselst,
desto weniger Sinn sehe ich darin, hier überhaupt noch zu antworten,

also: in jedem Lehrbuch gibts lange Kapitel dazu
http://www.galileocomputing.de/open...20_010.htm#mjb00e1bc95eda8d4f8bb3a64db6528aea

im Grunde kann man aber eigentlich nicht mehr dazu sagen als in kurzen Beispielen steht:
PreparedStatement updateLieferant = con.prepareStatement(
"UPDATE Lieferanten SET Adresse = ? WHERE Adresse LIKE ?" );
updateLieferant.setString( 1, "Uferstraße 80" );
updateLieferant.setString( 2, "Uferstrasse 78" );
updateLieferant.executeUpdate();

so gehts und mehr ist da fast nicht zu sagen, selbst wenn ich wollte ;)

--------

formuliere in deutscher Sprache, WAS du daran nicht verstehst,
dann könnte man Korrekturen versuchen
 
G

Guest

Gast
Hi Slater,

habe es mittlerweile hinbekommen :D
Hab im Internet eine ganz gute Erklärung gefunden.

"Ich will nix verstehen" gibt es bei mir nicht bzw. geht auch nicht da ich meine Uni noch fertig machen muss.
Ist ja nur noch dieses Semester :cool:

Manchmal steht man auf dem Schlauch und braucht einen Schupser...
Bin in Java noch ein blutiger Anfänger und deswegen für jeden Tip dankbar!

Nochmals Danke für Die Antworten!

Viele Grüße
 
G

Guest

Gast
jetzt hab ich wieder einen Fehler gefunden... :x

Mein preparedStatement funktioniert.
Allerdings, wenn ich ein Hochkomma setze, wird es nicht mit in die DB geschrieben.
Setze ich zwei Stück vor z.B. einen Namen, wird eins übertragen.

Was läuft hier falsch?
 
S

SlaterB

Gast
Beispiel?
aber ich kann es derzeit eh nicht ausprobieren,

neuer Thread vielleicht erfolgsversprechender
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I H2 - GUI Tool.... sehe aber keine Tabellen Datenbankprogrammierung 2
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Z Ein haufen Fehlermeldungen aber keine Ahnung warum... Datenbankprogrammierung 9
Z Ein Haufen Fehlermeldungen und keine Ahnung... (H2 DB mit Intellij und Scene Builder ) Datenbankprogrammierung 16
V keine Verbindung möglich (Access-DB) Datenbankprogrammierung 3
OnDemand Select * from bringt keine Rückgabe Datenbankprogrammierung 49
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
J keine Werte vom PHP Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
S DB2 Express C - keine Verbindung zur Datenbank Datenbankprogrammierung 2
I Es kann keine Verbindung zum Server aufgebaut werden Datenbankprogrammierung 12
D Keine Datenbankverbindung Datenbankprogrammierung 4
M Keine Antwort der Datenbank bei updateQUery(); Datenbankprogrammierung 2
J SQL-Statement Trigger zeigt keine Wikrung PL/SQL Datenbankprogrammierung 2
W Keine ODBC-Verbindung zur MSAccess-Datenbank Datenbankprogrammierung 2
E Warum kann ich keine Datenbank mit DB2 erstellen? Datenbankprogrammierung 2
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
T JAR keine H2 driver? Datenbankprogrammierung 3
B Mysql speichert keine 0 alls String Datenbankprogrammierung 11
D Keine Einträge in die Datenbank Datenbankprogrammierung 5
E Derby/JavaDB Keine Reaktion von "insert into" im ActionListener Datenbankprogrammierung 22
Kenan89 Keine Datenbankverbindung möglich Datenbankprogrammierung 52
E JDO -> keine Maps Datenbankprogrammierung 2
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
C Derby/JavaDB JavaDB: Keine Connection Datenbankprogrammierung 7
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
C MySQL Keine Datenbankverbindung Datenbankprogrammierung 6
André Uhres SQL Abfrage erkennt keine Buchstaben mit Akzenten (z. B. é, è) Datenbankprogrammierung 3
P Hibernate -> SQL verwenden und keine Entity Datenbankprogrammierung 19
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
F Kann keine Verbindung mit HSQLDB aufbauen Datenbankprogrammierung 2
M Keine doppelten Datensätze einfügen Datenbankprogrammierung 24
C keine Verbindung zur MS-SQL-Datenbank mehr Datenbankprogrammierung 4
Y Keine verbindung mit der Datenbank Datenbankprogrammierung 2
D Keine Ausgabe der Daten Datenbankprogrammierung 3
C Keine Verbindung Datenbankprogrammierung 12
B JDBC txt File keine Row ID Datenbankprogrammierung 4
J JDBC - setAutoCommit(false) hat keine wirkung? Datenbankprogrammierung 2
S ResultSet enthält keine Daten Datenbankprogrammierung 2
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
P Es werden keine Daten mehr in die Tabelle eingefügt Datenbankprogrammierung 4
A Fehlermeldung: Keine Daten verfügbar Datenbankprogrammierung 2
M Hilfe - keine Connection zur DB Datenbankprogrammierung 4
C Keine Verbindung zu HSQLDB möglich Datenbankprogrammierung 22
I Nach export zur .jar keine verbindung mehr Datenbankprogrammierung 7
I Kann keine Daten aus ResultSet holen ? Datenbankprogrammierung 11
J Keine Connection zur MySQL Db Datenbankprogrammierung 6
I Keine Treiber-Klasse! Datenbankprogrammierung 9
K keine Verbindung zu mysql Datenbank Datenbankprogrammierung 11
W Keine leeren Felder bei Access Datenbankprogrammierung 15
M Bekomme keine Daten in die DB! Datenbankprogrammierung 11
H Kann keine Verbindung zur DB herstellen Datenbankprogrammierung 7
G linux mysql keine verbindung Datenbankprogrammierung 8
T Prepared Statements und Sets Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
C PostgreSQL Prepared Statement Datenbankprogrammierung 7
N Prepared Statement mit unbekannter Anzahl von Where-Clauses Datenbankprogrammierung 30
L MySQL Prepared Statement batch langsamer als bulk insert? Datenbankprogrammierung 10
F Frage zu Prepared Statement Datenbankprogrammierung 2
L Wiederverwendung von Prepared Statements Datenbankprogrammierung 4
Landei Mehre Werte für einen Prepared-Statement_Parameter übergeben? Datenbankprogrammierung 3
N prepared Statements Datenbankprogrammierung 6
D Problem: Prepared Statement (Insert) funktioniert nicht. Datenbankprogrammierung 3
G Mit Prepared Statement in MDB schreiben Datenbankprogrammierung 7
W Prepared Statement und Verbindungsverlust Datenbankprogrammierung 4
W Prepared Statement mehrere Zeichenketten Datenbankprogrammierung 4
P Prepared Statement scheint nicht zu funktionieren Datenbankprogrammierung 14
N Prepared Statement Datenbankprogrammierung 8
G Flexible Prepared Statements Datenbankprogrammierung 2
F Update mit Prepared Statements Datenbankprogrammierung 10

Ähnliche Java Themen

Neue Themen


Oben