Portal > Foren > Java > Allgemeine Java-Programmierung > Dynamische SQL-queries
Antwort
 
Themen-Optionen
Alt 08.02.2007, 19:34 Nach oben    #1
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard Dynamische SQL-queries

ich suche ne möglichkeit, relativ einfach sql-queries dynamisch zu erstellen, um eine suchfunktion mit variabler anzahl bedingungen verschiedener arten zu realisieren.
Ich schreib einfach mal ein stück code, wie ich mir die anwendung vorstelle:
java Code:
  1. SearchQuery query = new SearchQuery("items");
  2. query.addCondition(new NameCondition("test"));
  3. query.addCondition(new Condition("myKey", "Value"));
  4. query.addCondition(new Condition("user", "me", false));
  5. statement.executeStatement(query.toSQL());
und das soll dann in folgendem SQL-querie enden:
sql Code:
  1. SELECT * FROM items WHERE name = "test" AND myKey = "Value" AND user != "me"
gibts da irgendwas in der richtung, oder muss ich mir selber was basteln?
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2007, 19:40 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

Also genau sowas hab ich die ganze letzte Woche gesucht. Ohne Erfolg.
Ich schätze, dass man das selber schreiben muss, was aber nicht sehr schwer sein sollte.
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag.
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2007, 19:43 Nach oben    #3
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard

ne, net wirklich. Einziges problem is aber, dass man da keine prepared statements verwenden kann. aber das is bei so ner dynamik eh net möglich...

also dann werd ich wohl mal was schreiben müssen...

ich poste mein ergebnis dann aber auf jeden fall auch hier
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2007, 22:43 Nach oben    #4
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 426
Standard

Bisschen zeit gehabt:

Code:
import java.util.ArrayList;

public class SearchQuery {
	
	private String quote = "\"";
	
	private String table = "";
	
	private String[] fields = null;
	private ArrayList<String> connections = new ArrayList<String>();
	private ArrayList<String> conditions = new ArrayList<String>();
	
	public SearchQuery(String table){
		this(table, new String[]{"*"});
	}
	
	public SearchQuery(String table, String[] fields){
		this.table = table;
		this.fields = fields;
	}
	
	public void addNameCondition(String key){
		conditions.add("name = " + quote + key + quote);
		connections.add("AND");
	}
	
	public void addCondition(String key, String value){
		addCondition(key, value, true);
	}
	
	public void addCondition(String key, String value, boolean isTrue){
		conditions.add(key + ((isTrue)?" = ":" != ") + quote + value + quote);
		connections.add("AND");
	}
	
	public void addCondition(String key, String value, boolean connect,boolean isTrue){
		conditions.add(key + ((isTrue)?" = ":" != ") + quote + value + quote);
		connections.add((connect ? "AND" : "OR"));
	}
	
	public void addConditionAsNumber(String key, String value, boolean isTrue){
		conditions.add(key + ((isTrue)?" = ":" != ") + value);
		connections.add("AND");
	}
	
	public void addConditionAsNumber(String key, String value, boolean connect,boolean isTrue){
		conditions.add(key + ((isTrue)?" = ":" != ") + value);
		connections.add((connect ? "AND" : "OR"));
	}
	
	public String toSQL(){
		String query = "SELECT ";
		for (int i = 0; i < fields.length; i++) {
			query += fields[i];
			if(i < fields.length -1){
				query += ", ";
			}else{
				query += " ";
			}
		}
		query += "FROM " + table;
		if(conditions.size() > 0){
			query += " WHERE ";
			for (int i = 0; i < conditions.size(); i++) {
				if(i != 0){
					query += connections.get(i) + " ";
				}
				query += conditions.get(i) + " ";
			}
		}
		return query.trim();
	}
	
	public static void main(String[] args){
		SearchQuery sq = new SearchQuery("test_table", new String[]{"name","date"});
		sq.addNameCondition("test_name");
		sq.addCondition("test_key1", "test_value1");
		sq.addCondition("test_key2", "test_value2", false);
		sq.addConditionAsNumber("test_key3", "3", false, false);
		System.out.println(sq.toSQL());
	}
}
Ist bisschen mehr dabei als bei deiner idee...
Hab nur das mit der Condition-Klasse nicht übernommen, aber ich hoffe das macht nichts.
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2007, 11:49 Nach oben    #5
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard

ich hab jetzt auch was geproggt, is aber noch aufm andern pc ohne inet
mein system is aber um einiges umfangreicher.
Momentan unterstützt es:
  • Spalten *g*, mit ALIAS
  • Tabellen, mit ALIAS, teilweise JOINS mit Bedingung
  • komplexe Bedingungen (verschachtelt und verknüpft)
  • ORDER BY
  • GOUP BY
  • LIMIT

ich werd auf jeden fall noch die JOINS fertig machen und vllt. auch noch SUBQUERIES, aber mal sehen...
Heute abend oder erst Montag lad ichs dann mal hoch.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2007, 13:34 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hallo,
das hier passt zwar jetzt nicht ganz zur eigentlichen Frage, aber ich hau es hier trotzdem mal rein.

Ich bin über das Zend Framework darauf gestoßen, welches die Möglichkeiten von Lucene auf PHP portiert.

Vielleicht kannst du ja da mal reinschauen und dir einige Ansätze "abschauen" bzw. wenn es ein größeres Projekt ist einfach Lucene nutzen?!

Vielleicht hilft es ja.
Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2007, 23:25 Nach oben    #7
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Hallo,
das hier passt zwar jetzt nicht ganz zur eigentlichen Frage, aber ich hau es hier trotzdem mal rein.

Ich bin über das Zend Framework darauf gestoßen, welches die Möglichkeiten von Lucene auf PHP portiert.

Vielleicht kannst du ja da mal reinschauen und dir einige Ansätze "abschauen" bzw. wenn es ein größeres Projekt ist einfach Lucene nutzen?!

Vielleicht hilft es ja.
Grüße, Ben.
Ich weiss jetzt nicht genau ob es das ist was gesucht wird... Wenn schon auf
das Zend Framework hingewiesen wird, dann wohl eher auf Zend_Db_Select.
Oder habe ich jetzt was missverstanden
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.02.2007, 08:37 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ich meinte was anders, allerdings ist deine Ergänzung auch gut.
Es geht ja hier um Java und nicht um PHP und da wollte ich mal auf Lucene hinweisen, weil ich über das ZF darauf gestoßen bin.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.10.2007, 02:41 Nach oben    #9
Benutzer
 
Registriert seit: 15.02.2005
Beiträge: 33
Standard

Zitat:
Zitat von $traight-$hoota Beitrag anzeigen
ich suche ne möglichkeit, relativ einfach sql-queries dynamisch zu erstellen, um eine suchfunktion mit variabler anzahl bedingungen verschiedener arten zu realisieren.
Als eine Ergänzung noch folgender Hinweis: Das Oracle-RDBMS bietet dynamisches SQL in verschiedenen Ausprägungen direkt an, sodass du dort solche "Klimmzüge" gar nicht erst machen musst.
__________________
No Sig
Entitaet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.10.2007, 07:25 Nach oben    #10
Erfahrener Benutzer
 
Benutzerbild von Gottzilla
 
Registriert seit: 02.02.2005
Beiträge: 522
Standard

So, und jetzt übergeb deiner Klasse mal einen String der im String selbst den Quote erhält ...
Gottzilla ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Komischer SQL Fehler kampfgnom Datenbanken 8 05.06.2007 16:59
Abkürzung des Wochentags in SQL, vgl. strftime in PHP Ben Datenbanken 4 12.04.2007 16:51
Zugriff auf Wert des vorhergenden Datensatzes in einer SQL Abfrage Jay Datenbanken 5 17.07.2006 15:25
sql query where .... browse array juergreh PHP-Programmierung 6 13.05.2006 09:49
SQL Dumper bei all.inkl.com Jan Gesuche 10 15.03.2006 19:53


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:28 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44