Java SQL Insert escapen

=fire=

Erfahrenes Mitglied
Hallo,

ich suche die funktion für Java um die Strings vor dem Insert zu escapen, damit ich auch folgendes machen kann:

INSET INTO ... VALUES ('Peter's Bücher');

SELECT:
Java:
		String query = "SELECT * FROM test WHERE buch='Peter's';
		try {
			// Setzt eine neues Statement, initaliesiert die MySQL Abfrage
	        Statement st = mysql.createStatement();
	        // Führ den Query String aus und speichert das Ergebnis
	        ResultSet rs = st.executeQuery(query);
	        // Gibt das Ergebnis zurück
	        return rs;
[..]
INSERT:
Java:
Statement st = mysql.createStatement();
// Setzen des Query's für das einfügen
st.executeUpdate("INSERT test (buch) VALUES ('Peter's')");
			ResultSet rs = st.getGeneratedKeys(); 
			int insertedKeyValue = 0;
			if ( rs != null && rs.next() ) { 
				insertedKeyValue = rs.getInt(1); 
			}
			return insertedKeyValue;
 
Warum willst du dir nen String bauen und dann da drin noch rumescapen ?
Mach es doch so wie es sich in Java gehört : mit Variablen

Java:
Statement.executeUpdate("INSERT INTO "+table+" VALUES ('"+value1+"', '"+value2+"')");

Dann hast du das Problem nicht denn Java baut dann den String so zusammen das es auch funktioniert. Außerdem bekommst du sonst via SQLException die genaue Fehlermeldung wo was nicht passt.
 
Stimmt schon das PreparedStatements besser und sinnvoller sind ... aber als einfache Lösung kann mans schon so machen wie ichs als Beispiel gepostet habe.
 
Hmm ... das überlass ich dem JDBC-Driver ...
Hab ja gesagt : wenns immer noch nicht funktioniert sollte der Driver per SQLException schon den Fehler bemeckern ^^
 
PreparedStatements sind ein Muss, denn sie sind weniger anfällig für SQL-Injection. Wer im großen Maßstab ohne PreparedStatements arbeitet, handelt fahrlässig und verschenkt je nach DBMS eine Menge Rechenzeit.
 
Hallo!
Wie oben schon erwähnt worden ist, sind hier variablen die beste Lösung.

Java:
String value = "Peter´s";
String stmt = "select * from <Table> where <Attribut>="+value;

//Bessere Lösung

PreparedStatement ps1 = null;
ResultSet rs1 = null;
String stmt = "selcect * from <Table> where <Attribut>=?";
ps1 = <Connection>.prepareStatement(stmt);
ps1.setString(1, "Peter´s"); //oder ps1.setString(1, value);
rs1 = ps1.executeQuery();


Grüße,
Javacode
 
Zuletzt bearbeitet:
Zurück