SQL Query dynamisch mit Java generieren

-ben-

Mitglied
Hi zusammen!

Ich möchte SQL Queries dynamisch in Java "zusammensetzen". Jetzt stehe ich immer wieder vor dem selben Problem: z.B. ein Query mit mehreren Bedingungen

Code:
SELECT * FROM PERSON WHERE LANGUAGE='de' AND CATEGORY='Abenteuer' AND...
Die Bedingungen werden mit AND gekoppelt. Nach der letzten darf allerdings kein AND mehr folgen.
So banal das klingt, habe ich noch keine "saubere" Lösung gefunden. Gäbe es da irgend eine möglichkeit das sauber mit MessageFormat oder sonst irgendwie zu lösen?

Danke und Gruss
 
Nein, den String kann ich schon zusammensetzen. Dafür brauche ich einen StringBuffer.
Mein Problem ist, dass am Ende kein AND angehängt wird. Dafür suche ich eine "saubere" Lösung.
 
Hallo!

Code:
  List conditions = new ArrayList();
  		conditions.add("a=1");
  		conditions.add("b=231");
  		conditions.add("c=3231");
  		conditions.add("d=1232");
  		StringBuffer sql = new StringBuffer("SELECT * FROM foo WHERE ");
  		for (Iterator iter = conditions.iterator(); iter.hasNext();) {
  			String condition = (String) iter.next();
  			sql.append(condition);
  			if(iter.hasNext()){
  				sql.append(" AND ");
  			}
  		}
  		System.out.println(sql);
... in der Regel ist das händische Aufbauen von SQL Abfragen sehr Fehleranfällig.
-> Versuch dich doch mal mit Hibernate (http://hibernate.org/) oder iBatis (http://sourceforge.net/projects/ibatisdb) :)

Mit hibernate hast du ein komplett objektorientiertes Query-API:
Code:
 Criteria criteria = session.createCriteria(Person.class);
 		criteria.add(Expression.eq("name", "Foo"))
 				.add(Expression.eq("age", Integer.valueOf(22)))
 				.add(Expression.eq("hairColor", "blond"));
-> SELECT * FROM tblPerson WHERE name='foo' AND age=22 AND hairColor='blond';

Gruß Tom
 
Hi Tom

Vielen Dank für deine Antwort!
Ja, das ist allerdings sehr Fehleranfällig. Habe schon etliche Zeit mit dem Zusammensetzen von Queries verschenkt :mad:

Hibernate kenne ich, kommt jedoch aus Performancegründen in diesem speziellen Fall nicht in Frage.

Gruss
ben
 

Neue Beiträge

Zurück