[Java] SQL Statements auslagern

  • Antworten:8
Stefan S.
  • Forum-Beiträge: 560

21.11.2012, 08:27:02 via Website

Was genau möchtest du denn auslagern bzw. was ist der Sinn dahinter?

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

21.11.2012, 08:47:10 via Website

Derzeit liegen viele und zum Teil Mega-Queries in meinen SQLiteOpenHelpern. Die Queries bestehen teilweise aus 100 Zeilen und mehr. Das ganze verstopft mit den ganzen Quotes und "+" völlig die Sicht auf die wirklich wichtigen Dinge. Zudem bin ich ein Pingel und bestrebt das SQL formatiert abzulegen und zu lesen.

Mir schwebt vor diese Queries pro Projekt/App in eine Datei auszulagern und bei der Ausführung (oder pre-cached) heranzuziehen.

Das Ganze sollte pro Query mehr-zeilig funktionieren - also nicht eine Zeile pro Query. Dann kann ich einen SQL-Beautifier das SQL formatieren lassen und der Java Code wird vom Java-Beautifier verschönert.

Mir ist klar das der SQLiteOpenHelper und die Queries eigentlich eine Einheit bilden - ich würde das aber gerne trotzdem aus praktischen Gründen trennen.

Antworten
Stefan S.
  • Forum-Beiträge: 560

21.11.2012, 08:50:45 via Website

Ich habe meine SQL-Statements in einer separaten Klasse als Konstante abgelegt. Bei Querys, bei welchen Paramter übergeben werden habe ich einfach diese mit =%s eingetragen und der Aufruf füllt dann diese %s ab.

Oder habe ich dich jetzt falsch verstanden?

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

21.11.2012, 08:57:55 via Website

Das wäre dann aber wieder eine Java Datei mit all den Nachteilen bei der SQL-Formatierung. Mir schwebt vor die SQL-Statements aus Java Klassen rauszuhalten.

Ich habe mein Eclipse mit den kompletten Android Formatierungsvorgaben (Java/XML) gefüttert. Da wird aus einem eingebetteten SQL-String der reinste Horror. Aus 100 Zeilen SQL werden dann mit Leichtigkeit 300 Zeilen SQL im Java Code.

Ist halt eine fixe Idee - aber warum nicht mal etwas Neues ausprobieren?

Antworten
Stefan S.
  • Forum-Beiträge: 560

21.11.2012, 09:01:51 via Website

Jetzt hab ich es auch kapiert :grin:

Können diese Dinger nicht als Resourcen abgelegt werden? Oder motzt dann das System wegen komischer XML-Formatierung?

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

21.11.2012, 09:14:09 via Website

Ich nutze zum formatieren immer diesen SQL Formatter. Ich habe gerade gesehen der kann auch auf eine Zeile formatieren. Das wäre vielleicht auch noch eine Option da ich das Ergebnis dann ohne weitere Eingriffe 1:1 kopieren/ändern/umformatieren kann.

Im assets Ordner habe ich mir mal eine "MySQLiteOpenHelper.properties" Datei reingelegt - ich werde damit mal rumspielen:

1# Delete key from xxx
2deletexxx: DELETE FROM xxx WHERE _id = {0}
3
4# Delete key from yyy
5deleteyyy: DELETE FROM yyy WHERE _id = {0}
6...

— geändert am 21.11.2012, 09:15:07

Antworten
Klaus T.
  • Forum-Beiträge: 8.183

21.11.2012, 09:16:52 via Website

Harald Wilhelm
Ist halt eine fixe Idee - aber warum nicht mal etwas Neues ausprobieren?

Zwar kein Android....aber ich mache viel mit Spring bzw dem Spring Integration Framework und da ist es Gang und Gäbe, Statements - bzw eigentlich alles was variabel von aussen steuerbar sein soll, auszulagen (xml). Aber dort wird das in Zusammenhang mit Inversion Of Control/Dependency Injection verwendet...anderes Thema, aber total spannend...

if all else fails, read the instructions.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

21.11.2012, 09:28:37 via Website

Stefan S.
Jetzt hab ich es auch kapiert :grin:

Können diese Dinger nicht als Resourcen abgelegt werden? Oder motzt dann das System wegen komischer XML-Formatierung?
Entweder so, oder einfach als Plain-Text Dateien ablegen und mit Classloader.getResourceAsStream() laden.
Wenn du da Variablen ersetzen willst ist die primitivste Möglichkeit dann einfach MessageFormat

— geändert am 21.11.2012, 09:28:55

Antworten