-
Datenbank Verbindung auf die AS400?
Schönen guten Tag zusammen,
ich habe mal hier ein Script welches auf die Datenbank zugreifen soll, hab es erfolgreich mit QSH gewandelt doch beim ausführen bekomme ich diese Fehlermeldung, leider weiß ich nicht genau das diese bedeutet und wie ich Sie beheben kann und hoffe auf Ihre Hilfe.
Infos:
Fehlermeldung:
java.lang.ClassNotFoundException: COM.ibm.db2.jdbc.app.DB2Driver
at java.lang.Class.forName(Class.java:130)
at DBverbindung.main(DBverbindung.java:13)
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager .java:592)
at java.sql.DriverManager.getConnection(DriverManager .java:196)
at DBverbindung.main(DBverbindung.java:21)
Exception in thread "main" java.lang.NullPointerException
at DBverbindung.main(DBverbindung.java:31)
CLASSPATH:
Neuer Wert . . . . . . . . . . . '''.:/QIBM/ProdData/Java400/ext/db2_classes.
jar:/QIBM/ProdData/OS400/jt400/lib/jt400Native.jar:/QIBM/ProdData/Java400/jdk6/b
in:/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar'
Call:
java -classpath "/X/Y/C/src/" DBverbindung
Code:
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HauptKlasse
{
public static void main(String[] args)
{
// load the DB2 Driver
try {
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// establish a connection to DB2
try {
Connection db2Conn = DriverManager.getConnection("jdbc:db2:Datenbank","USER","USER");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection db2Conn = null;
Statement st = null;
try {
st = db2Conn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String myQuery = "SELECT * FROM Bibo.Tabelle;
// execute the query
ResultSet resultSet = null;
try {
resultSet = st.executeQuery(myQuery);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// cycle through the resulSet and display what was grabbed
try {
while (resultSet.next())
{
String name = resultSet.getString("Marke");
String phoneNumber = resultSet.getString("Anzahl");
System.out.println("Name: " + name);
System.out.println("Phone Number: " + phoneNumber);
System.out.println("-------------------------------");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// clean up resources
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
db2Conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Die Toolbox mit der JDBC ist vonhanden.
Hinweis:
/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar
/QIBM/ProdData/OS400/jt400/lib/jt400Native.jar
Beide Datei sind da.
-
Der Treiber-Name ist Casesensitive.
Die Schreibweise ist also GENAU einzuhalten, damit der Treiber gefunden wird.
Beispiel der Toolbox-Treiber:
com.ibm.as400.access.AS400JDBCDriver
Connectionstring:
jdbc:as400://DB-Name/DefaultLib
Der DB-Name muss per WRKRDBDIRE registriert sein.
-
Danke für den Tipp. Hab nun bekomme ich diesen Fehler:
java.sql.SQLException: INTERNAL ERROR: Creation of DB2Driver object for registering with DriverManager failed. -> com.ibm.db2.jd
bc.app.DB2JDBCDataException: CCSID value is not valid.
Hab auch schon per chgjob CCSID auf 37 gesetzt hat nichts gebracht.
Und gibt es ein gutes Beispiel wie man eine Verbindung zur DB aufbau die den Treiber verwendet den Sie genannt haben? (com.ibm.as400.access.AS400JDBCDriver)
-
Mit obigem Namen geht das bei mir so:
Class.forName(driverName); // register driver
con = DriverManager.getConnection(url, userName, password);
fromSelect = con.createStatement();
fromSelect.setQueryTimeout(60);
fromResult = fromSelect.executeQuery("select * from ...");
while(fromResult.next()) {
// mach was
}
-
Ich habe mich mal ein Ihre Vorlage gehalten, wie es aussieht findet der den Treiber nicht obwohl ich in der CLASSPATH den angegeben habe.
Mein Code:
Code:
public static void main(java.lang.String[] args) {
try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
System.out.println("ERROR: One of the JDBC drivers did not load.");
System.exit(0);
}
try
{
// Obtain a connection with each driver.
Connection conn1 = DriverManager.getConnection("Jdbc:as400://DB", "X","X");
Statement stmt = conn1.createStatement();
stmt.setQueryTimeout(60);
ResultSet rs = stmt.executeQuery("select * from babachanja.BLEISTIFT");
while(rs.next()) {
System.out.println(rs.getString("Marke"));
}
conn1.close();
}
catch (SQLException e)
{
System.out.println("ERROR: " + e.getMessage());
}
}
Fehler: ERROR: One of the JDBC drivers did not load.
CLASSHPATH:
Umgebungsvariable . . . . . . . > 'CLASSPATH' Zeichenwert
Neuer Wert . . . . . . . . . . . '.:QIBM/ProdData/Java400/ext/db2_classes.jar
/QIBM/ProdData/OS400/jt400/lib/jt400Native.jar:/QIBM/ProdData/HTTP/Public/jt400
lib/jt400.jar:/QIBM/ProdData/Java400/jdk6/bin'
Call:
Code:
java -classpath "/X/Y/C/src" HalloWelt
-
Wenn du beim Aufruf -classpath angibst, wird die Umgebungsvariable CLASSPATH nicht verwendet!
Du kannst aber
-classpath $CLASSTPTH:/X/Y/C/src HalloWelt
verwenden.
$Variable wird dann extrahiert.
-
Bis ich das zum laufen bekomme, werde ich alt und grau xD.
Code steht im letzten Beitrag.
Code:
java -classpath $CLASSPATH: "/X/Y/C/src" HalloWelt
Exception in thread "main" java.lang.NoClassDefFoundError: .X.Y.C.src
Caused by: java.lang.ClassNotFoundException: .X.Y.C.src
at java.net.URLClassLoader.findClass(URLClassLoader.java:498)
at java.lang.ClassLoader.loadClass(ClassLoader.java:650)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:616)
-
... das mit dem alt und grau, das kann ich nachvollziehen, deine Lernversuche erinnern mich an ein Krabbelkind, dem man Fahrrad fahren beibringen will...
Fang doch mal mit dem Basiswissen an:
https://www.dropbox.com/l/7tfWJqi3BRJJSFplOXmNea
wenn Du da durch bist und auf Datenbanken los willst, dann vielleicht hier weiter:
http://docs.oracle.com/javase/tutorial/jdbc/
Für die AS/400 Spezifika gibt es wenig taugliches Material, überall wo IBM draufsteht, findest Du da nur *** ( so Beispiele wie das, welches Du als Ausgangspunkt genommen hast). Aber für den Anfang bist Du ja erst mal versorgt.
D*B
-
java -classpath $CLASSPATH:/X/Y/C/src HalloWelt
Zwischen $CLASSPATH und deinem Path ist das Leerzeichen zu viel und der Pfad gehört nur in Anführungstriche bei Leerzeichen, es geht also auch:
java -classpath $CLASSPATH:"/X/Y/C/src" HalloWelt
-
BenderD danke für die Links.
Zur meiner Verteidigung, ich habe kein Problem mit Java welches ist aktiv in der Schule lerne.
Mein Problem ist es, das wir nur mit Eclipse entwickeln und ich mich mit dieser QSH Konsole überhaupt nicht auskenne und meine AS400 Kenntnisse sind noch auf einem sehr niedrigen Level.
Aber jeder hat mal klein Angefangen, und ich hoffe das ich in einigen Jahren, hier nicht nur Fragen stelle , sondern auch helfe beantworten kann.
Für die AS/400 Spezifika gibt es wenig taugliches Material, überall wo IBM draufsteht, findest Du da nur *** ( so Beispiele wie das, welches Du als Ausgangspunkt genommen hast).
Kann ich nur bestätigen, ich hatte mal ein Codebeispiel für C++ übernommen der hälfte des Code war falsch und bis ich verstanden habe das auch IBM was falsch machen kann waren Tage vergangen.
Fuerchau: Ich danke Ihnen für die Hilfe, so hat es funktioniert.
Hatte in der zwischen Zeit was anderes versucht doch auch ohne erfolg.
Code:
===> export -s CLASSPATH=/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar:QIBM/ProdData/Java400/ext/db2_classes.jar:/QIBM/ProdData/OS
400/jt400/lib/jt400Native.jar:/QIBM/ProdData/Java400/jdk6/bin
und dann java "/X/Y/C/src" HalloWelt
weil das hier geholfen haben soll --> http://newsolutions.de/forum-systemi...does-not-exist
Aber war wohl nicht so xD.
-
... ich habe mein Statement auch nicht als Angriff gemeint.
@Java lernen in der Schule:
Java Programme entwickeln ist das eine und diese dann auf einem anderen Rechner zu implementieren (Deployment) ist das andere (gilt auch für andere Programmiersprachen), eine dritte Sache ist dann: wie starte ich ein Programm auf einem bestimmten Rechner.
Für Java ist da eine gängige Vorgehensweise:
- für die Entwicklung hat sich Eclipse weitgehend durchgesetzt.
- für das Deployment erstellt man sich eine jar Datei seiner Anwendung. (dabei unterstützt einen auch Eclipse, normalerweise nimmt man dafür ein ANT Script)
- starten kann man Java Anwendungen, die eine Class mit einer main Methode haben, oder startbare jar Dateien. Wie das wiederum geht, findet man hier:
http://docs.oracle.com/javase/7/docs...s/tools/#basic
für AS/400 wählt man dann die UNIX/Solaris Variante
Die Windows und Unix Variante unterscheidet sich dabei nur durch das Trennzeichen in Listen.
Ob überhaupt und welche Java Version installiert ist, bekommt man über java -version heraus. Will man eine andere installierte Java Variante verwenden, setzt man die Umgebungsvariable JAVA_HOME (näheres dazu erzählt Tante Google, wenn man nach JAVA_HOME und AS400 suchen lässt)
D*B
-
Meine kleinen Java-Progrämmchen (Vorlage übrigens von Dieter) mache ich auch mit Eclipse.
Man muss für die Generierung nur die richtige Javaversion einstellen (1.4, 1.5 oder was immer die AS/400 installiert hat), dann ist sogar das fertige Jar lauffähig.
Die Toolbox habe ich mir in den Exclipspfad gelegt und importiert, so dass ich über Eclipse sogar testen (debuggen) kann, was mit AS/400 zwar gehen soll, ausprobiert habe ich das aber noch nie.
Somit habe ich schon einige Progrämmchen mit kopieren zwischen AS/400-DB und einer Oracle-DB (JDBC-Treiber von Oracle) geschrieben, die schon lange problemlos (seit V5R4) im Einsatz sind und sogar Releasewechsel ohne Anpassungen überstanden haben.
Vorschlag also:
Lade die Toolbox auf den PC, importiere die jar in dein Projekt und du kannst alles per Eclipse erledigen.
Das fertige jar schiebst du ins IFS, schreibst ein kleines CLP drumrum für den Aufruf per JAVA-CMD.
Similar Threads
-
By hpheim in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 26-05-03, 13:53
-
By infomio in forum NEWSboard Windows
Antworten: 2
Letzter Beitrag: 16-04-03, 14:23
-
By speedy in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 10-02-03, 13:05
-
By Kagerbauer in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 20-10-01, 12:56
-
By Markus_M in forum NEWSboard Windows
Antworten: 4
Letzter Beitrag: 19-09-01, 13:09
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks