# Parameter in SQL-Abfrage nutzen



## strong (6. Aug 2009)

Hallo,

ich habe folgendes Problem. ich möchte ein String in SQL Abfrage nutzen. 

z.B.


```
public List<String> searchByIsbn(String param) {
	
	List<String> list = new LinkedList<String>();
	List<String> list_error = new LinkedList<String>();
	list_error.add("nicht gefunden!!!");
	
	
	
	try {
		Class.forName("com.mysql.jdbc.Driver");
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
	Connection con;
	try {
		con = DriverManager.getConnection("jdbc:mysql://localhost/web3", "root", "1903");
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery("select * from book where isbn /*also ich möchte param-String hier abfragen*/");  
		
		list.add(rs.getString(1));
		
		
		
		rs.close();
		stmt.close();
	
	}
	
	catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
```

ResultSet rs = stmt.executeQuery("select * from book where isbn /*also ich möchte param-String hier abfragen*/");  

Also wie kann ich dann die spalte isbn nach String param suchen? Vielen Dank!!


----------



## maki (6. Aug 2009)

Sieh dir mal PreparedStatements an.


----------



## The_S (6. Aug 2009)

Dafür verwendet man normalerweise PreparedStatements mit einem ? als Platzhalter. Google mal danach. Falls du nicht weiter kommst, frag einfach noch einmal hier .


----------



## Michael... (6. Aug 2009)

Du musst Dir einfach nur das Statement mit Stringoperationen korrekt aufbauen. z.B:

```
ResultSet rs = stmt.executeQuery("select * from book where isbn ='" + param + "'");
```
Oder Du verwendest PreparedStatements:

```
PreparedStatement pstmt = con.prepareStatement("select * from book where isbn = ?");
```
und führst die im späteren Verlauf folgendermaßen aus:

```
pstmt.setString(1, param);
ResultSet rs = pstmt.executeQuery();
```


----------



## byte (6. Aug 2009)

Michael... hat gesagt.:


> Du musst Dir einfach nur das Statement mit Stringoperationen korrekt aufbauen. z.B:
> 
> ```
> ResultSet rs = stmt.executeQuery("select * from book where isbn ='" + param + "'");
> ```


Bloß nicht...


----------



## strong (6. Aug 2009)

Respekt!  So schnell eine Lösung habe ich mir nicht gedacht.. Die Lösungen von byte und Michael... waren genug, das Problem zu lösen. Danke noch mal..


Viele Grüße

Strong


----------



## maki (6. Aug 2009)

Solange du das hier nicht verwendest..

```
ResultSet rs = stmt.executeQuery("select * from book where isbn ='" + param + "'");
```


----------



## ARadauer (6. Aug 2009)

Falls die Frage auftaucht, warum?
1. de.wikipedia.org/wiki/SQL-Injection 
2. Performance (meistens)


----------



## maki (6. Aug 2009)

ARadauer hat gesagt.:


> Falls die Frage auftaucht, warum?
> 1. de.wikipedia.org/wiki/SQL-Injection
> 2. Performance (meistens)


Nicht zu vergessen sind die impliziten Konvertierungen bzw. Maskierungen


----------

