[java]sql Statement bearbeiten

Dieses Thema im Forum "Java/Mono/dotGNU" wurde erstellt von juan_, 29.05.2009.

  1. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    990
    Zustimmungen:
    0
    Ort:
    Berlin
    Hallo beisammen,

    Ich habe ein kleines Problem bei der Datenbankabfrage.
    Gegeben sei ein Programm mit Textfeldern, Checkboxen und Comboboxen und einem SQL Statement.

    Nehmen wir weiter an, dass ich bspw.
    den Inhalt des Textfeldes in die Variable "text", den Inhalt der checkbox in "chk" und die Auswahl der Combobox in "cmb" gespeichert habe.

    Wenn ich nun mein sql Befehl mit diesen Angaben versehen will, sähe er zB so aus:
    Code:
    sql = 
    " 
    Select * from Tabelle1 
    WHERE xyz=" + "'" + text + "'" + "
    AND zyx=" + "'" + chk + "'" + " 
    AND abc=" + "'" + cmb + "'" + ";
    (hoffe, dass das ein bisschen übersichtlicher ist ;))
    
    Soo, was wäre aber, wenn die Felder nicht zwangsläufig aktiviert/beschrieben sein sollen? es geht hierbei um eine Art Filter, dass ich zB sage, dass er mir alle Tuple anzeigen soll, wo chk=true ist.

    Wie setzt man sowas um?

    Hoffe ihr wisst was ich meine;)

    Merci
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 supersucker, 29.05.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    [ Ich hoffe, du verträgst Kritik ]

    Wenn ich sowas sehe....plain-text SQL-Abfragen im Quellcode.

    Unwartbar, unleserlich und fehleranfällig hoch 10.

    Wenn ich dein Auftraggeber wäre, würde ich sowas komplett zurückwandern lassen.

    Für sowas nimmt man ein ORM-Framework wie z.b. Hibernate (zumindest in der Java-Welt).

    Ja, ich weiß was du meinst....:-)

    Das ist aber eher ein "optionales Setzen von Bedingungen".

    Das wirst du aber mit plain-text-SQL nicht hinkriegen, ohne das es ein ellenlanges "switch-case" oder "if-else"-Gemurkse wird.

    Richtig "sauber" und übersichtlich geht das halt nur mit einem ORM-Framework, s.o.

    Um dir noch ein Beispiel zu geben (kann dir keines in Hibernate geben, da ich Java + Hibernate schon lange nicht mehr benutzt habe):

    So würde deine Abfrage in RubyonRails + ActiveRecord (ORM) aussehen:

    Code:
        scope = scope.scoped :select => "DISTINCT foo.*"
        scope = scope.scoped :conditions => ["bla = ?", bla == "true"] if bla
        scope = scope.scoped :conditions => ["blub = ?", blub  == "true"] if blub
    
    Fertig.

    Fazit:

    Du hast 2 Möglichkeiten:

    1. Völliger Murks mit ellenlangem, nicht wartbarem Code
    2. ORM
     
  4. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    990
    Zustimmungen:
    0
    Ort:
    Berlin
    Hallo,
    Danke für deine schnelle Antwort. Hibernate kann und werde ich mir mal bei Gelegenheit angucken. Noch muss das wohl über Murks laufen ;)

    das Ganze soll natürlich nicht professionell werden und da ich erst seit 1 Woche mit java und db's spiele, werde ich wohl auf die unsaubere Lösung zurückgreifen. dachte nur, dass es vielleicht möglich (im SQL Statement) wäre zu sagen, "wenn Bedingung 1 = "", dann ist nicht das Feld leer, sondern die Bedingung einfach nicht aktiv".

    Ciao
     
  5. #4 supersucker, 29.05.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Nein,

    im SQL selber kannst du das nicht machen.

    Du musst also, wie schon erwähnt, dir was mit Java zurechtbasteln.

    Und glaub mir, wenn du sowas mal für viele Bedingungen brauchst, wirst du ganz schnell anfangen auf ORM umzusteigen.....:devil:

    Fairerweise muss allerdings noch erwähnt werden, das du natürlich auch eine Stored-Procedure nehmen könntest, aber das wäre ein noch größeres Verbrechen.
     
  6. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    990
    Zustimmungen:
    0
    Ort:
    Berlin
    Okay.
    Ich riskiers' einfach ;)

    Ich habe nur 4 Parameter, also passts schon. ich muss mir nur überlegen, wie ich die Anweisung gestallte. ist ja auch nicht so leicht, weil ich ja nicht jede mögliche Kombination abarbeiten will.

    Wie gesagt, arbeite erst seit Kurzem damit..

    Danke
     
  7. #6 supersucker, 29.05.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ich glaube, du hast mich nicht ganz verstanden....:-)

    Genau das MUSST du aber machen in deiner jetzigen Konstellation.

    Wobei dich natürlich nix davon abhält, dir Code zu schreiben, der dem code ähnelt, wie in einem ORM deiner Wahl verwendet wird.

    Z.B. so in Pseudo-Code:

    Code:
     sql = 'Select * from Tabelle1 '
    condArr = []
    condArr.push('xyz='  + text )  if !( text == null)
    condArr.push('zyx='  + chk )  if !( chk == null)
    condArr.push('abc='  + cmb )  if !( cmb == null)
    sql += 'where ' + condArr.join(' AND ') if condArr.size > 0
    sql += ';'
    
    Musst nur noch auf java adaptieren und du hast was du wolltest...:)
     
  8. #7 juan_, 29.05.2009
    Zuletzt bearbeitet: 29.05.2009
    juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    990
    Zustimmungen:
    0
    Ort:
    Berlin
    genau bei der Arraysache bin ich auch gerade. zum Glück kann ich auch Ruby, da brauch ich mir den Kopp nicht mehr selbst zerbrechen ;)

    Danke
    //edit:
    kurze Zwsichenfrage: wo ist bei einer checkbox der Unterschied zwischen null und false?
    //edit2:
    achso, du willst ruby Programmierer sein? (null != nil ;))
     
  9. #8 saeckereier, 29.05.2009
    Zuletzt bearbeitet: 29.05.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Lies dir in der Doku mal durch wie man Prepared Statements benutzt. Du solltest dir NICHT angewöhnen, SQL Abfragen in der Art zusammenzubauen. Im Gegensatz zu supersucker denke ich man kann durchaus auch mal SQL Abfragen direkt skripten, aber wenn man das macht:
    - Prepared Statements verwenden => über Platzhalter im SQL-Statement die Parameter setzen
    - SQL Statements mit den Platzhaltern in Resource-Files auslagern. Es ist doof, sowas nachher im Code anpassen zu müssen, wenn sich die DB ändert.
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 supersucker, 29.05.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Wer lesen kann, ist wie immer im Vorteil:

    Ich zitiere mich selber:

    Das ist lustig, da helf ich Depp dir und muss mich dann noch beleidigen lassen.

    Na dann, viel Erfolg noch.
     
  12. #10 juan_, 30.05.2009
    Zuletzt bearbeitet: 30.05.2009
    juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    990
    Zustimmungen:
    0
    Ort:
    Berlin
    Hey supersucker,
    ich bin dir echt dankbar für die Hilfe, und wollte nur ein kleines Späßchen zum (fast) gelösten Problem machen. Ich dachte das Smiley am Ende hats verdeutlicht. Aber wenn nicht: Sorry, war echt nicht so gemeint.

    saeckereier, auch dir danke. ich werds mir mal angucken. //edit: prepared statements kann wohl leider keine Selects

    Gute Nacht
     
Thema: [java]sql Statement bearbeiten
Besucher kamen mit folgenden Suchen
  1. java sql statement bearbeiten

Die Seite wird geladen...

[java]sql Statement bearbeiten - Ähnliche Themen

  1. alias in if statement beim ersten Mal nicht erkannt

    alias in if statement beim ersten Mal nicht erkannt: Hallo, ich möchte einige Bash-Befehle in einer Zeile ausführen: if ! which bla ; then alias bla='ls' ; echo hi ; fi ; alias ; bla...
  2. Hilfe! Mit Datenbank verbinden und Statements ausführen.

    Hilfe! Mit Datenbank verbinden und Statements ausführen.: Liebe Community, Ich brauche dringendes eure Hilfe. Ich bin Praktikant bei der Telekommunikationsfirma [Name entfernt]. Ich bin nun die 3. Woche...
  3. % in SQL Statement

    % in SQL Statement: Hallo Ich will in Perl folgende Abfrage starten: $dbh->prepare ("SELECT * FROM tabelle where dateiname = 'name.%.txt';")Funktioniert aber...
  4. (AufAbwegen) - MSSQL Server Statement - Syntax

    (AufAbwegen) - MSSQL Server Statement - Syntax: Hallo Gemeinde, ich bin auf Abwegen und brauche "mal eben" ein MSSQL Statement, ich habe das ganze schon so lange nicht mehr gemacht das ich auch...
  5. Tabelle aus SQL-Statement filtern

    Tabelle aus SQL-Statement filtern: hallo zusammen ich möchte aus einem übergebenen sql-statement (parameter eines shell scripts) die angegebene tabelle herausfiltern, da ich diese...