Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Mit java eine Schnittstelle zu einer Datenbank erzeugen?

Tromain / 3 Antworten / Baumansicht Nickles

Hallo Leute,


ich habe folgendes Problem, ich muss zu einer SQL Datenbank eine Schnittstelle mit Java2 Programmieren. Die Schnittstelle soll die Daten aus der ersten Datenbank auslesen die ich festlege und in eine zweite Datenbank übergeben. Ich hatte mir gedacht das ich die ausgelesenen Daten erstmal in eine Temporäre Datei übergebe und dann von dort aus dann in die zweite Datenbank übergeben, aber es muss auch einen direkten Weg geben, denn der Weg den ich gewählt habe funktioniert nicht. Kann mir irgendjemand der schon sowas ähnliches gemacht hat seinen Sourcecode schicken. Wäre total dufte von Euch.

bei Antwort benachrichtigen
vergisses Tromain „Mit java eine Schnittstelle zu einer Datenbank erzeugen?“
Optionen

Hallo Tromain,

lange nichts gehört ;-)

Für die Verbindung Java -> SQL Datenbanken gibt es JDBC.
Schau mal in der Docu zur Java Package java.sql nach.
Mit JDBC kannst Du auch mehrere Sessions gleichzeitig
in verschiedenen Datenbanken aufhalten.

Wenn das verwendete RDBMS Database Links kann (z. B. Oracle)
würde ich das Ganze allerdings rein in SQL als Stored Procedure
über die Database Links machen.
Die stored Procedure würde dann z. B. über den Oracle Task
Sheduler angestoßen.
Alternativ bietet sich auch evtl. Replikation an,
wenn die Datenbank das kann. (Hängt auch von der genauen
Aufgabenstellung ab)


Gruss, vergisses

bei Antwort benachrichtigen
Tromain vergisses „Hallo Tromain, lange nichts gehört - Für die Verbindung Java - SQL Datenbanken...“
Optionen

Mhm meine JDBC-ODBC Schnittstelle läuft bereits, wird von SQL2000 mitgeliefert. Die Sache ist ja die, dass die Datenbank schon mit Daten Repliciert wurde. Also sprich die in die leere Datenbank wurde eine gefüllte Datenbank reingeschrieben. Ich brauche aber die Java Schnittstelle als Interface, also als Kommunikationsschnittstelle zwischen den 2 Datenbanken. Mit Replication wäre es ja fast zu einfach. Ich muß in dem Javaprogramm sagen suche mir per Select die Daten aus der ersten Datenbank und transportiere sie mir in die zweite Datenbank. Also im enteffekt das was der Replicationsmanager von SQL macht, nur halt nicht so umfangreich. Deswegen dachte ich mir das, dass Java Programm die Daten aus der ersten Datenbank einliesst, diese in ein temporäres File schreibt und dann von dort aus die Daten an die zweite Datenbank übergibt. Aber das geht irgendwie nicht und ich sehe einfach kein Weg.

bei Antwort benachrichtigen
vergisses Tromain „Mhm meine JDBC-ODBC Schnittstelle läuft bereits, wird von SQL2000 mitgeliefert....“
Optionen

Hi,

falls es einen Thin JDBC Client für MS SQL Server 2000 gibt,
würde ich diesen der JDBC-ODBC Bridge vorziehen.
Dann kannst Du zeitgleich jeweils eine Verbindung zu beiden
DB´s aufbauen (hier die Oracle Variante):

Als Membervariable der Klasse definieren:
Connection conn1,conn2;
Statement stmt;
ResultSet res;

Die Connect Methode:
private void ConnectToDB() throws SQLException
{
conn=DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.1.99:1521:db1",
"username","userpassword");
stmt=conn.createStatement();

conn1=DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.1.100:1521:db2",
"username2","userpassword2");
}

Das Select aus der Quelle:
private void executeQuery() throws SQLException
{
res=stmt.executeQuery(" SELECT "+
"Feld1,"+
"Feld2,"+
"Feld3 "+
"FROM Tabellenname "+
"WHERE Feld1 = 1 ) "+
"ORDER BY Feld2");
}

Die Daten ins Ziel eintragen:
private void doCopy() throws SQLException
{
String sFeld1,sFeld2,sFeld3,sInsert;
PreparedStatement pstmt;
int rc;
while(res.next())
{
sFeld1=new String(res.getString(1);
sFeld2=new String(res.getString(2);
sFeld3=new String(res.getString(3);
sInsert=new String("insert into Tabelle (Feld1,Feld2,Feld3) values ( ? , ? , ?)");
pstmt=conn1.prepareStatement(sInsert);
pstmt.setString(1,sFeld1);
pstmt.setString(2,sFeld2);
pstmt.setString(3,sFeld3);
rc=pstmt.executeUpdate();
}
}

Und das Disconnect von den DB´s nicht vergessen:
private void DisConnectFromDB() throws SQLException
{
conn.close();
conn1.close();
}


Ich habe das Ganze natürlich nicht getestet, Fehler sind
also gut Möglich, Verbesserungen bestimmt auch ;-)

Gruss, vergisses

bei Antwort benachrichtigen