# WARUM?



## stevepflc (8. Feb 2007)

WARUM geht das???:


```
PreparedStatement pstatement = null;

pstatement = connection.prepareStatement("SELECT * FROM meldung_table ORDER BY "+sortby+"");
				pstatement.execute();
ResultSet resultset = pstatement.getResultSet();
```

ABER das nich???:


```
PreparedStatement pstatement = null;

pstatement = connection.prepareStatement("SELECT * FROM meldung_table ORDER BY ?");
				pstatement.setString(1, sortby);				
			                pstatement.execute();
ResultSet resultset = pstatement.getResultSet();
```

DANKE 		[/code]


----------



## SlaterB (8. Feb 2007)

WARUM hat dieses Topic so einen bescheidenen Titel? 

1. setString ist nur für Strings, wenn es ginge, dann würde daraus z.B.
ORDER BY 'huhu' werden, mit Hochkommata wie für Strings üblich,

2. das System mit ? und setX() ist wahrscheinlich nur für Wert-Parameter, nicht für Tabellen- oder Attributnamen,
also wird wahrscheinlich schon das Compilieren, das "Preparen" des Statements nicht hinhauen,


----------



## DP (8. Feb 2007)

stevepflc hat gesagt.:
			
		

> WARUM



darum


----------



## stevepflc (8. Feb 2007)

aha!
gibt es da eine methode die keine ' ' setzt ???
mfg steve


----------



## KSG9|sebastian (8. Feb 2007)

Der Sinn von den ? Platzhaltern ist der, dass man z.B. bei WHERE-Bedingungen u.a. SQL-Injection durch schlechtes Programieren verhindert. Ebenso wird es übersichtlicher (und noch zig weitere vorteile).
Aber es ist definitiv nicht dafür da, dass man einen SQL-String baut den man über ein PS belibig anwenden kann


```
PreparedStatement ps = con.prepareStatement("? ? ? ? ? ? ? ?");
ps.setString(1, "SELECT");
ps.setString(2, " * ");
ps.setString(3, " FROM ");
ps.setString(4, " users ");
ps.setString(5, " WHERE ");
ps.setString(6, " userId ");
ps.setString(7, " = ");
ps.setInt(8,  1337);
```

Sehr cool..1 Statemtn für die ganze Anwendung


----------



## AlArenal (8. Feb 2007)

1337


----------



## KSG9|sebastian (8. Feb 2007)




----------

