PDA

View Full Version : JDBC



alex
12-11-02, 10:39
Hallo Javaisten,

habe ein Java Programm geschrieben, welches
über JDBC eine AS400 file liest und eine Ausgabe tätigt. Auf dem PC funkt gut. Nun möchte ich dieses Programm auf die AS400 portieren und habe es kompeliert. Bei Ablauf des Programmes steht das Programm bei der Erstellung der Verbindung zur AS400. Den JDBC Treiber findet das Programm noch, aber bei "getConnection" rührt sich nichts mehr. Keine Fehlermeldung und nix. Ist das überhaupt möglich AS400 Daten in AS400 Java Programmen zu verwenden ???

Alex

CMueller@must.de
12-11-02, 11:26
Hi Alex,

das geht sicher. Wenn der über getConnection tatsächlich nicht hinauskommt, würde ich z.B. mal versuchen, den LoginTimout explizit zu setzen:

DriverManager.setLoginTimeout(30);

Dann sollte er nach 30 Sekunden auch Fehler werfen, die dann mit printStackTrace() Auskunft geben, was ihm nicht gefällt.

Christoph

alex
12-11-02, 14:41
Hallo Christoph,

ich habe das Problem gefunden. AS400 seitig scheint mit der Namensauflösung was nicht zu stimmen ( bei uns ). Nach 5 min Verbindungszeit hat es dann funktioniert.

Hast du ( reinzufällig ) ein Beispiel dafür,
wie man von der AS400 auf eine DB2 Datenbank
per JDBC zugreifen kann ???

Alex

CMueller@must.de
12-11-02, 20:34
So ein abgeschlossenes reines Beispielprogramm leider nicht. Hier ein vereinfachtes Beispiel zum Export von AS/400 Daten, das echt im Einsatz war. Basiert auf dem Open Source Projekt Cameleon OSP. Dort sind dann die JDBC-Zugriffe in einer Klasse DataObject gekapselt.

Aber vielleicht hat ja noch jemand ein elementareres Beispiel...

/*
* Copyright (c) 2001 Christoph Mueller. All rights reserved.
* Public Domain sample code
*/

package various;

import de.must.wuic.*;
import de.must.dataobj.*;
import de.must.io.*;
import de.must.util.*;
import java.awt.*;
import java.sql.*;

public class PrExport extends ProgressFrame {

public PrExport() {
this.setTitle("AS/400-Daten exportieren");
setProgressMaximum(1000);
startThread();
}

protected void act() {
try {
Global.getInstance().createOrCheckConnections();
TextFile fileNames = new TextFile("fileNames.txt");
String fileName;
while (!isCanceled() && (fileName = fileNames.readLine()) != null) {
export(fileName);
}
}
catch(Exception e) {
e.printStackTrace();
}
finally {
Global.getInstance().closeMainConnection();
System.exit(0);
}
}

private void export(String tableName) {
System.out.println("Exporting " + tableName);
DirectDataObject bisDataObject = new DirectDataObject(Global.getInstance().getMainConne ction(), tableName);
Protocol output = new Protocol("outfiles\\" + tableName + ".txt");
bisDataObject.select("*");
int nbrOfColumns = bisDataObject.getColumnCount();
int limiter = 0;
int counter = 0;
while (!isCanceled() && bisDataObject.nextRow() /* & ++limiter <= 1000*/) {
setProgressValue(++counter);
setMessage("Exporting record " + counter + " of " + tableName);
// while (!isCanceled() && bisDataObject.nextRow()) {
String line = "";
for (int i = 0; i < nbrOfColumns; i++) {
if (i > 0) line += "|";
line += bisDataObject.getText(bisDataObject.getColumnName( i));
}
output.addEntry(line);
// System.out.println(line);
}
output.close();
bisDataObject.closeQuery();
}

}


/*
* Klasse Global
* Copyright (c) 2001 Christoph Mueller.
* Public Domain sample code
*/

package various;

import de.must.io.TextFile;
import de.must.middle.GlobalStd;
import de.must.dataobj.ConnectionHolder;
import de.must.dataobj.ConnectionSpecification;

public class Global extends GlobalStd {

private static Global instance;

public final static Global getInstance() {
if (instance == null) {
instance = new Global();
}
return instance;
}

protected ConnectionSpecification getActualConnectionSpecification() {
return new ConnectionSpecification("DBNAME", "DBUSER", "USERPWD");
}

}

alex
13-11-02, 06:53
Hey Christoph,

vielen Dank erstmal. Schau mir das Beispiel mal an. Einen schönen Arbeitstag.
Alex