fb18.de
/ Diplom Informatik
/ Unterbereich Grundstudium
/ Praktische Informatik
P3 Aufgabenblatt 5 Aufgabe 2
Es gibt ja eine extra Methode closeStatement(). Wann muss ich denn das Statement öffnen?
darf ich das schon bei der DB-Connection, oder muss ich das in der methode askDB() machen?
Ich würde eher zu askDB tendieren, doch der Kommentar von Dorina lautet wie folgt:"Sends a query to the data base and returns a result set"
Wann soll ich nun das Statement öffnen?
JULIAN
Hi,
ich denke dass die Aufgabenstellung fehlerhaft ist.
laut API kann man pro Statement nur ein ResultSet haben, das heisst man kann immer nur eine Anfrage gleichzeitig an die Datenbank stellen, was mir doch sehr unflexibel erscheint.
Ich wuerde also in askDB ein Statement oeffnen, die anfrage machen und das ResultSet zurueckgeben.
in closeStatement wuerde ich dann Statement und ResultSet wieder schliessen, aber hierfuer muesste man der Methode noch einen Parameter übergeben, womit die Loesung dann nicht mehr der (unsinnigen) Aufgabenstellung entspricht.
ich denke dass die Aufgabenstellung fehlerhaft ist.
laut API kann man pro Statement nur ein ResultSet haben, das heisst man kann immer nur eine Anfrage gleichzeitig an die Datenbank stellen, was mir doch sehr unflexibel erscheint.
Zugegeben, die Aufgabe ist nicht sehr praxisnah… aber sie desshalb fehlerhaft zu nennen finde ich uebertrieben. Man wuerde wohl nicht auf die Idee kommen, den Code so in einem richtigen Programm zu nutzen, aber um mal kurz mit JDBC rumzuspielen und Funktionsweisen zu erklaeren ist es doch ausreichend. Nur MHO…
Gibt es eine praktischere oder elegantere Ausgabe als
rs.getString(int columnIndex)???
Wichtig!!!
Firstname in Employee ist Firstnme!!!
Also nicht verzagen, wenn der nicht will:)
JULIAN
Wenn ich "Class.forName("com.ibm.db2.icc.DB2Driver");" ausführe bekomm ich immer ne ClassNotFound-Exception und kann somit auch keine Verbindung aufbauen. Was mach ich falsch?
Wenn ich "Class.forName("com.ibm.db2.icc.DB2Driver");" ausführe bekomm ich immer ne ClassNotFound-Exception und kann somit auch keine Verbindung aufbauen. Was mach ich falsch?
hmm, das hört sich für mich so an als ob der Treiber nicht im classpath liegt. Einfach nur das jar runterladen bringt natürlich nicht viel.
Und welche Datei muss wohin?
Die beiden .jar Dateien können mit ins Verzeichnis, wo auch deine AccessDB.java liegt, dann musst du sie noch importieren, wenn du eclipse als Entwicklungsumgebung benutzt.
Class.forName("com.ibm.db2.jcc.DB2Driver");
ClassNotFoundException: com.ibm.db2.jcc.DB2Driver
Was mache ich falsch?
Was mache ich falsch?
Du liest nicht, was hier bereits steht.
Ich hab das schon gelesen und das so gemacht, aber trotzdem klappt das bei mir nicht
Falls Du mit Eclipse arbeitest:
Project/Properties => Java Build Path/Libraries und dann per "Add Jars" die beiden Jars von der VSIS Seite hinzufügen (die im Projekt Verzeichnis liegen müssen).
Hmm… wie Krieg ich das ResultSet ausgedruckt….toString() nicht, oder??
Hmm… wie Krieg ich das ResultSet ausgedruckt….toString() nicht, oder??
Doch die toString Methode, es gibt aber zwei davon; getString(int n) gibt die Spalte n aus; getString(String name) gibt die Spalte name aus.
edit: da.source, hast natürlich recht…
Hmm… wie Krieg ich das ResultSet ausgedruckt….toString() nicht, oder??
Doch die toString Methode, es gibt aber zwei davon; toString(int n) gibt die Spalte n aus; toString(String name) gibt die Spalte name aus.
Jungs? Was macht ihr da? AFAIK heisst die Methode getString(…).
Erstmal Danke Jungs, bin mittlerweile selbst draufgekommen… immer ätzend diese Fummelei, bis man merkt, dass es auch hätte fixer von statten gehen können :-). Nu gehts eigentlich, nur …
Lassen Sie sich per SQL-Abfrage die Namen der Angestellten (Staff) ausgeben, deren Name mit 'G' beginnt
…versteh ich nicht die Staff Table nicht. ICh denke die soll bei der Anfrage nicht benutzt werden, oder? Was soll der Hinweis? Also was ist Staff überhaupt genau….. nunächst mal :-)
EDIT
…versteh ich nicht die Staff Table nicht.
So Ragga GAGA [img]
http://www.fb18.de/gfx/24.gif[/img]
Lassen Sie sich per SQL-Abfrage die Namen der Angestellten (Staff) ausgeben, deren Name mit 'G' beginnt
…versteh ich nicht die Staff Table nicht. ICh denke die soll bei der Anfrage nicht benutzt werden, oder? Was soll der Hinweis? Also was ist Staff überhaupt genau….. nunächst mal :-)
Mein Ü-Leiter hat mir heute morgen erklärt, dass das ein Relikt aus einer älteren Version des Aufgabenzettels ist.
Die Datenbasis an der wir arbeiten ist wohl Teil einer Beispieldatenbank, die nicht richtig viel Sinn macht. Die Unterscheidung zwischen "Staff" und "Employee" ist z.B. nicht nachvollziehbar.
Kann es sein, dass es keinen "Firstname" in Employee gibt???
Kann es sein, dass es keinen "Firstname" in Employee gibt???
Hatten wir das nicht schon? Auszug aus der ddl.txt:
------------------------------------------------
-- DDL Statements for table "DB2INST1"."EMPLOYEE"
------------------------------------------------
CREATE TABLE "DB2INST1"."EMPLOYEE" (
"EMPNO" CHAR(6) NOT NULL ,
[b]"FIRSTNME" VARCHAR(12) NOT NULL ,[/b]
"MIDINIT" CHAR(1) NOT NULL ,
.
.
.
Also "FIRSTNME" statt "FIRSTNAME".
Ich habe nochmal ne Frage:
Wenn ich die Ausgabe hübsch machen möchte, z.B. bei Teilaufgabe 2, wie schaffe ich das, so dass alle Namen die gleiche Feldanzahl haben, danach die Berufe alle schön anfagen usw.
Also das es so aussieht:
Name Beruf Abteilung
Julian Student WiInf
Sören Student Inf
Und nicht so:
Name Beruf Abteilung
Julian Student WiInf
Sören Student Inf
Mahatma Student Theologie
Gruss
JULIAN
jr meinte, es gäbe da eine Möglichkeit in SQL für jede Spalte den längsten Wert zu ermitteln, so das man alles fein formatieren könne.
Einfach darauf warten, das jr hier mal vorbeiguckt oder einen Blick in die SQL-Doku werfen [img]
http://www.fb18.de/gfx/25.gif[/img]
Es gibt über das ResultSet Metadaten, die Du mit resultSet.getMetaData() erhältst. Das Metadatenobjekt hat dann eine Methode resultSetMetaData.getColumnDisplaySize(int column) mit der Du die Breite der Spalte abfragen kannst.
Wenn Du nun eine Schleife durchläufst, die Dir ein int-Array erzeugt, in das Du diese Daten schreiben läßt, kannst Du über eine kleine Berechnung die Anzahl der Leerfelder berechnen, die Du mit der jeweiligen Stringausgabe konkatenierst und schon sollte das laufen.
Gruß, Dirk