Beispiel Script verstehen

Hi miteinander,
ich muss im Studium Java mit DB2 verbinden.
Zuerst mal haben wir ein Beispiel- Programm zur verfügung, was eigentlich funktionieren sollte (wohl nicht unter Windows ?).

Ich möchte Euch zu wenigen Zeilen fragen um was es geht… letzlich will ich es zum laufen bekommen.

static{try{class.forName(„COM.ibm.db2.jdbc.app.DB2Driver“).newInstance();
Obige Zeile verstehe ich kaum.
static heißt wohl man kann diese Methode auch ohne Instanzierung (sprich einem Object) verwenden (?).
try ?? was is´n das ?
Und den Rest der Zeile verstehe ich eigentich auch nicht.

Was ist denn „COM.ibm.db2.jdbc.app.DB2Driver“ ?
Ist das ein Verweiss auf ne Bibliothek ? Ist das Linux/Unix spezifisch ? Wie hiese das dann unter Windows ?

Also wär nett wenn du mir auf die Sprünge helfen könntest, so das ich das ding zum laufen bekomme.

Viel Grüß Sebastian

Hier das komplette:

import java.sql.\*;
 
class DB2Appl { 
 static { try { Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
 } catch (Exception e) {
 e.printStackTrace();
 System.out.println(e);
 }
 }

 public static void main(String argv[]) {
 Connection con = null;

 // URL is jdbc:db2:dbname
 String url = "jdbc:db2:dbprakt9";

 try {
 if (argv.length == 1) {
 // connect 
 con = DriverManager.getConnection(url);
 }
 else {
 System.out.println("Usage: java DB2Appl ");
 System.out.println(" (Die Query muss in Hochkommata stehen!");
 System.exit(0);
 }

 // retrieve data from the database
 System.out.println("Retrieve some data from the database...");
 Statement stmt = con.createStatement();
 ResultSet rs = stmt.executeQuery(argv[0]);

 ResultSetMetaData rsmd = rs.getMetaData();
 int noOfCols = rsmd.getColumnCount();
 int i;

 System.out.println("Received results:");

 for(i = 1; i 

Moin

Zuerst mal haben wir ein Beispiel- Programm zur verfügung, was
eigentlich funktionieren sollte (wohl nicht unter Windows ?).

die COM.ibm.db2.jdbc.app.DB2Driver jar ist nicht installiert, sonst würd es gehen.

static{try{class.forName(„COM.ibm.db2.jdbc.app.DB2Driver“).newInstance();
Obige Zeile verstehe ich kaum.

static in dem Kontext: alles was in den Schleifen steht wird ausfeührt wenn die Klasse geladne wird. Es wird nur 1x pro JVM-Start ausgeführt.

Ist eine Art Konstruktor, nur eben nicht für Instanzen, sondern für Klassen.

try: Das ist ein try-catch-Block. Du solltest dich dringend mit dem Exception-System von Java auseinander setzen, das wirst du für die Aufgabe im Schlaf beherrschen müssen.

class.forName(„COM.ibm.db2.jdbc.app.DB2Driver“);:
„class.forName“ sucht eine Klasse. Wird sie gefunden, so wird sie geladen. (Da werden z.B. die static-Blöcke ausgeführt). COM.ibm.db2.jdbc.app.DB2Driver ist der jdbc-Treiber für eine IBM-DB2-Datenbank. Der Aufruf versucht also einen Treiber für eine DB-Verbindung aufzutreiben. Dabei durchläuft java den Classpath und alle Systemjars.

newInstance(): erzeugt eine neue Instanz von der (evtl. gefundenen) Klasse. Ist wie „new Integer (2)“, nur das der Klassenname (COM.ibm.db2.jdbc.app.DB2Driver) nicht explizit hingeschrieben wird. (Den Teil kann man weglassen, der ist für den Rest des Progs nicht wichtig. Eine Abfrage auf null wäre informatisch gesehen besser.) Steht der Treiber nicht zur Verfügung kommt hier der try-catch-Block zum tragen.

Was ist denn „COM.ibm.db2.jdbc.app.DB2Driver“ ?
Ist das ein Verweiss auf ne Bibliothek ?

Ist ein Standart-klassenname unter java, so wie z.B.:
java.io.DataInputStream oder java.lang.System oder javax.swing.JFrame.

Ist das Linux/Unix spezifisch ?

nein, java-spezifisch. (Der angesprochene Treiber kann aber Platform-spezifisch sein, das weiss man nicht)

cu

Hi pumkin, erst mal vielen dank für schnelle Antwort.

die COM.ibm.db2.jdbc.app.DB2Driver jar ist nicht installiert,

Ich muss also diese jar- Bibliothek (?) (Sammlung von Klassen)
finden und installieren.
Öhh… Ähh…
Mal kucken was google dazu sagt.

Nach lesen dieser Seite
http://danae.uni-muenster.de/~lux/se2/ss99/db2.html#…
mutmase ich, dass es sein könnte, ich muss nur einen
Window- PATH setzen, damit das jar- Packet gefunden werden kann,
was vielleicht schon irgendwo vorhanden ist ?

mit dem Exception-System von Java auseinander setzen, das
wirst du für die Aufgabe im Schlaf beherrschen müssen.

Werd ich machen, weisst mir zufällig ein guten link dafür (möglichst auf deutsch ?).
Unser Seminar geht nämlich um SQL nur wird anscheinend Java einfach vorrausgesetzt… dafür bin ich nicht vorbereitet… aber finde das eigentlich eine gute Gelegenheit.

cu :smile:

Moin

Ich muss also diese jar- Bibliothek (?) (Sammlung von Klassen)
finden und installieren.

jar’s sind normale zip-komprimierte Dateien. Java-Treiber, Programme, Applets, Handy-spiele… kommen alle als jar-Datei. Jars sind manchmal direkt ausführbar (d.h. java dekomprimiert on-the-fly ohne das man was tun müsste) (jar’s sind an sich zip-Dateien mit einer kleinen Erweiterung. winzip & Co dekomprimieren sie problemlos)

Kleine Dateikunde:
.java => Quellcode
.class => compilierter Code
(Manifest).MF => Beschreibung des Inhalts einer jar-Datei

mutmase ich, dass es sein könnte, ich muss nur einen
Window- PATH setzen, damit das jar- Packet gefunden werden
kann, was vielleicht schon irgendwo vorhanden ist ?

Der Treiber (die Treiber-jar) ist bei der DB dabei. Wo genau => frag IBM oder such nach „db2???.jar“.

Das mit Path würde ich lassen, das bring Unglück. Es ist unter java für Anfänger wesentlich einfacherer die Treiber-jars entweder:

  • zu entpacken und ins eigene Quellverzeichniss zu kopieren.
  • ODER ins ext-verzeichniss von java zu kopieren (such nach java.exe und geht dann nach „…/lib/ext“. java.exe gibts unter windows öfters, kannst auch nach dem Verzeichniss „ext“ suchen und dann auf Verdacht die Datei reinkopieren. Es schadet nicht wenn ein paar zuviel da sind.)

Nochwas ungewohntes für C-Leute: „com.ibm.XYZ.Class“ bezeichent eine Klasse und das Packet in dem sie drin ist. Die Klasse heist „Class“ und sie ist im Packet „com.ibm.XYZ“. Auf Platte muss die Datei im Verzeichniss com\ibm\XYZ, realtiv zum Startverzeichniss von java.exe liegen. (Oder in einer jar in ext-verzeichniss)

mit dem Exception-System von Java auseinander setzen, das
wirst du für die Aufgabe im Schlaf beherrschen müssen.

Werd ich machen, weisst mir zufällig ein guten link dafür
(möglichst auf deutsch ?).

So direkt nicht, aber als Einführung:
Exceptions sind Fehler wie „division durch 0“, „Zugriff auf einen null-pointer“ oder zu kurzes array,… Einige dieser Fehler müssen gefangen werden. D.h. der Code compiliert nicht bis man für alle möglichen Fehler einen Code-block angegeben hat. (Der Block darf leer sein, aber er muss da sein). Beispiel:

String str = "1200230";
try {
 resultat = Integer.parseInt(str);
} catch (Exception E){
 \*\*\*\*
}

**** wird aufgerufen wenn „str“ doch keine Zahl war. Wenn alles gut geht wird der Teil übersprungen.

Solche try-catch-blöcke muss man nicht um jede einzelne Operation machen. Bei Divisionen sind sie z.B. nicht Pflicht. Aber wenn du etwas à la „throws IOException“ bei einer Methode siehst, dann sind sie Pflicht.

Bei **** würde ich an deiner Stelle immer „E.printStackTrace()“ reinschreiben. Am Anfang kommt man so am schnellsten weiter.

Für alles weitere:
http://java.sun.com/docs/books/tutorial/trailmap.html

Ich empfehle:

  • „Getting Started“

  • „Learning the Java Language“ (Abschnitte „Language Basics“ und „Interfaces and Packages“ sind wichtig, der Rest kann nicht schaden. „java.lang“ und „java.util“ sind für dich am wichtigesten)

  • „Essential Java Classes“ („Accessing System Resources“ und
    „Handling Errors with Exceptions“)

  • „JDBCTM Database Access“ (Basics reicht)
    ODER

  • http://www.galileocomputing.de/openbook/javainsel3/j… (übersichtlicher, aber nicht besonders tief)

Dann noch die API/Klassen-dokumentation von java:
http://java.sun.com/j2se/1.4.2/docs/api/

Unser Seminar geht nämlich um SQL nur wird anscheinend Java
einfach vorrausgesetzt… dafür bin ich nicht vorbereitet…
aber finde das eigentlich eine gute Gelegenheit.

Wenn du nach den ersten paar Stunden fluchen über den Compiler immernoch der Meinung bist…

Wenn du schnell an’s Ziel kommen willst: hol dir ein IDE mit Auto-Vervollständigen. Das spart unheimlich Zeit. java ist die Sprache mit den längsten Methoden/Klassen-namen und die Sprache der 1000-casts. Aber wenn man erst mal drin ist geht’s gut…

cu

eclipse, Tomcat
Halöle :smile:

Der Treiber (die Treiber-jar) ist bei der DB dabei. Wo genau
=> frag IBM oder such nach „db2???.jar“.

Ok, danach gesucht, was dann dem

COM.ibm.db2.jdbc.app.DB2Driver

entsprechen soll,
und 30 Dateien gefunen.

Ich kann aber nicht erkennn, welche davon passen könnte…
Ich könnte ja auch einfach alle verwenden ? :open_mouth:

db2ca.jar, db2cc.jar, db2choc.jar, db2cmn.jar, db2das.jar, DB2DC.jar, db2debugrd.jar, db2dweti.jar, db2explain.jar, db2hcapi.jar, db2healthctr.jar, db2indbt.jar, db2jgraph.jar, db2journal.jar, db2launch.jar, db2md.jar, db2memvis.jar, db2replapis.jar, db2replctr.jar, db2ssmonapis.jar, db2taskctr.jar, db2toolets.jar, db2vwcom.jar, db2vwddd.jar, db2WrapperDiscovery.jar, db2WrapperDiscoveryImpl.jar, db2_vw.jar, db2fs.jar, db2jcc.jar, db2jcc_license_cu.jar

Solche try-catch-blöcke …

Danke habe ich sehr gut verstanden :smile:

Wenn du schnell an’s Ziel kommen willst: hol dir ein IDE mit
Auto-Vervollständigen.

Jaaa ! :smile: Ich verwende gerade eclipse, wurde empfohlen und ich find in prima… aber es hat mir jetzt jemand gesagt
ich bräuchte für eine spätere Aufgabe den
Tomcat-Server.

Ist sozusagen ein Java basierter Web-Server + Servlet-Engine, wird
benötigt (??) wenn Du Java-Servlet entwickeln willst.
http://jakarta.apache.org/tomcat/index.html

Aber ich glaube ein Java-Servlet kann eclipse auch machen (?!).
Und einen Web-Server hab ich hier schon laufen… da brauch ich doch nicht noch einen zweiten (Tomcat) ?

Also super Tipps - danke :smile: !

db2cc.jar und db2cc_license_cu.jar.
Ich glaube ich habe mittel google gefunden, welche Treiber ich brauche.
Quelle: http://www.is.informatik.uni-duisburg.de/teaching/le…
auf Seite 4

db2cc.jar und db2cc_license_cu.jar

werde dann da mal weiterlesen… scheint mir gut zu sein :smile:

cu

zum Thema Java + Datenbanken
Hallo meinerseits.

Vereinfacht gesagt wird mittels einer Standard Java Syntax eine Datenbank geöffnet und der für eine Anwendung interessierende Teil ausgelesen.
Auf Basis eines Servlets mit einem Tomcatserver im Hintergrund sähe das z.B. wie folgt aus (Oracle-DB als ‚thin‘ angesprochen):

import java.io.\*;
import java.sql.\*;
import javax.servlet.\*;
import javax.servlet.http.\*;

public class DBzugriff extends HttpServlet {
 public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;

 response.setContentType("text/html");
 PrintWriter out = response.getWriter();

 try {
 Class.forName("oracle.jdbc.driver.OracleDriver");

 conn = DriverManager.getConnection("jdbc:oracle:thin:@{Adresse, z.B. mymail.opera.com}:stuck\_out\_tongue:ort:{nnnn}:{Name der DB}","{user}","{password}");

 stmt = conn.createStatement();
 rs = stmt.executeQuery("select ID, Name from Layer");

 out.print("DB-test");
 out.println("");
 out.println(" Scheint zu funktionieren... ");
 out.println("");
 out.println("

„);
while(rs.next()){
out.println(“- " + rs.getString(„ID“) + „“ + rs.getString(„Name“));
}

out.println("