# Aufruf einer View über Java Gui



## 1Frage (30. Apr 2010)

Hallo zusammen,

ich habe einige Verständnisprobleme und würde gerne fragen, ob mein Vorhaben so realisierbar wäre.

Also, ich habe z.B. folgende View mit folgendem Query.

CREATE OR REPLACE FORCE VIEW BLA ("ZEIT", "Zahl1", "Zahl2", "Ergebnis")
SELECT TO_CHAR(y, 'dd.mm.yyyy') AS ZEIT,
       da.a AS Zahl1,
       db.b AS Zahl2,
a+b*(1-x) AS Ergebnis

FROM Data_a da,
        Data_b db,
        Zeiteinheit y

(WHERE y >= to_Date('01.08.2009','dd.mm.yyyy')
    AND y <= to_Date('01.10.2009','dd.mm.yyyy'))

Die Tabelle ist rein fiktiv und soll zur Veranschaulichung meines Problems dienen.
Meine Frage wäre jetzt z.B. wie rufe ich diese View auf mit der Where Klausel als Variable und der Variable x als zeitabhängiger Wert.

Ich hoffe, ich konnte mein Problem verdeutlichen.

Grüsse


----------



## Gast2 (30. Apr 2010)

Nicht so 100%ig.

Du hast hier erstmal nur SQL geposted und nichts zu deiner Java GUI/Java Programm und was du eigentlich machen möchtest, aber ich versuch es einmal:

Generell:
In Java erzeugst du den passenden Query, schickst ihn an die Datenbank und verarbeitest das Ergebnis. Dabei gibt es mindestens zwei Möglichkeiten:

1) den Query als String zusammen zubauen, also über Stringoperationen deine variablen Werte in den Query fummeln 
2) PreparedStatements nutzen
Ich würde dir immer zu 2) raten. Da musst du dir keine sorgen machen das du irgendwas falsch escaped hast oder die Datentypen nicht passen. Und bei häufigen Abfragen ist das auch schneller.

Zusammenfassend: Ja, du kannst mit Sicherheit machen was du vorhast


----------



## 1Frage (30. Apr 2010)

Du hast recht, ich habe erst mal nur Sql gepostet, weil ich mir nicht ganz sicher war, ob ich mein Vorhaben mit einer Java Gui realisieren kann.

Also ich möchte in der Java Gui z.B. ein fromdatum - tilldatum einbauen und dazu die möglichkeit haben das x selbst von 0-1 zu bestimmen. Nur habe ich eben die Views schon fertig und wollte nur wissen ob man die Views wie procedure behandeln kann. Bei Procedure hatte ich das mal mit callable statements gemacht.
Meine Frage wäre jetzt nur noch, wie kann ich in einer View Variablen definieren mit denen man aus der Gui aus einem Prepared Statement diese aufrufen kann?

Ich versuche meine Idee mal kurz zu posten:

CREATE OR REPLACE FORCE VIEW BLA ("ZEIT", "Zahl1", "Zahl2", "Ergebnis")
SELECT TO_CHAR(y, 'dd.mm.yyyy') AS ZEIT,
da.a AS Zahl1,
db.b AS Zahl2,
a+b*(1-x) AS Ergebnis

FROM Data_a da,
Data_b db,
Zeiteinheit y

WHERE y >= to_date(v_in_from_date, 'dd.mm.yy') 
  AND y <= to_date(v_in_till_date, 'dd.mm.yy');


PreparedStatement ps = Connection.prepareStatement("SELECT x, y FROM BLA WHERE (x=?, y=?, y=?)");

Ich bin mir nicht ganz sicher, ob ich diese Abfrage so abrufen kann?
Kann mir da jemand beim Code für Java kurz behilflich sein? Ich möchte eigentlich nur die from-till Zeit und x über die Gui setzen und das Ergebnis aus der View holen?

Gruss und danke


----------



## Gast2 (30. Apr 2010)

Ok, dann hab ich nicht wirklich ganz richtig verstanden. 'x' und 'y' sind ein Teil deiner View... Das geht nicht dynamisch. Die View wird einmal mit einerm Query definiert. Du müsstest deinen ganzen SELECT aus der View per JDBC an die Datenbank schicken.

Beispiele zu PreparedStatements findest du hier jede Menge über die Forensuche.


----------



## 1Frage (30. Apr 2010)

fassy hat gesagt.:


> ...Du müsstest deinen ganzen SELECT aus der View per JDBC an die Datenbank...



Ok, nehmen wir an, dass ich den ganzen SELECT an die DB via JDBC geschickt habe. 
Könnte ich nun die Variablen in Java so definieren, dass die Variablen aus Java mit einigen der Parameter der Select dynamisch agieren oder lieber als Procedure? Da könnte ich doch die View einfach in die Procedure packen und über Java aufrufen?

P.S. Ich bin leider kein Java Programmierer, daher die ganzen Fragen zur Kommunikation zwischen DB und Java (DB Verbindung steht schon). Ich kann die Inhalte über Java der View abrufen, jedoch wollte ich daraus was dynamisches basteln.
Außerdem muss die Aufgabe in Java geschrieben werden und ich nicht die Zeit habe mich intensiv mit Java auseinanderzusetzen.
Daher hier meine ganzen Fragen. Ich möchte natürlich nicht nervend wirken.


----------



## milit (7. Mai 2010)

Hallo, 
wie ich das verstanden habe hast Du die View fertig:

und über das z.b.

sql = "SELECT x, y FROM BLA WHERE x=? and y=?";
PreparedStatement ps = Connection.prepareStatement(sql);

mit ps.setLong (1,1);
..
könnest Du es varieren.
Wie die Query dann aussehen soll, machst dann über ein Fallunterscheidung im Vorfeld z.b. anhand von Feldern in der GUI.


----------

