Oracle Update Befehl in Datenbank anhand einer Schleife

Anubis273

Mitglied
Hallo Zusammen !

Ich hänge gerade an meinem Java Code fest und komme leider nicht weiter. Es geht darum, dass ich in einer anderen Java Klasse Daten in ein Text Dokument speichere und dieses lokal auf dem Rechner liegt. Nun gehe ich hin und lese dieses Dokument in meiner aktuellen Klasse hier aus und schreibe die Werte in eine Oracle Datenbank. Wenn ich die Klasse starte, schreibt er mir in das System out alle Werte ( In diesem Fall Typ der Datenbank ) in die Konsole. Wenn ich aber die Datenbank mit dem executeUpdate so befülle, schreibt er nur den letzten Wert der Schleife in die gesamte Spalte der Datenbank. Ich habe also in der Datenbank ca. 100 mal den letzten Wert der Schleife stehen und nicht wie in dem System.out richtig angegeben alle Datenbank Versionen.

Hier ist mal der Javacode zu der soweit funktionierenden Klasse:

import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;
import java.sql.*;
import java.util.ArrayList;
import java.sql.*;
import java.util.*;

public class InsertFileDataAsBLOB {

static String[] set = null;
static String url = "jdbc😱racle:thin😡xxx:1521:xxx";
static String userid = "xxx";
static String password = "xxx";
static Connection con = null;

public static void main(String[] args) throws Exception {

Connection con = getOracleJDBCConnection();
if(con!= null){
System.out.println("Verbindung zur Datenbank xxx hergestellt !");

Statement st=con.createStatement();
FileInputStream fstream = new FileInputStream ("C:/Users/xxx/Desktop/Incoming.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
ArrayList list=new ArrayList();
while ((strLine = br.readLine()) != null){
list.add(strLine);
}
Iterator itr;
for (itr=list.iterator(); itr.hasNext(); ){
String str=itr.next().toString();
String [] splitSt =str.split(" ");
String Datenbank="",IP="";
for (int i = 0 ; i < splitSt.length ; i++) {
Datenbank=splitSt[0];


}
System.out.println(Datenbank); // Zeigt alle Datenbank Versionen an !

int k=st.executeUpdate("UPDATE ANWENDUNG SET DBTYP = '"+Datenbank+"'");
// Dieses Update schreibt nur den letzten Wert der Schleife in die DB

}
}else{
System.out.println("Kann keine Verbindung zur Datenbank herstellen !");
}
}

public static Connection getOracleJDBCConnection(){

try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

for(Enumeration<Driver> e=DriverManager.getDrivers(); e.hasMoreElements(); )
System.out.println(e.nextElement().getClass().getName());

} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());

}try {
con = DriverManager.getConnection(url, userid, password);
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}

return con;
}
}
 
Variablen schreibt man klein, benutz bitte Java Code tags und debuge dein code doch mal dann kommst bestimmt sofort auf deinen fehler 😉
 
Ah sorry, die Tags hab ich natürlich in der Eile vergessen. Variablen schreibt man klein, richtig. Kann aber grad keine finden die ich Groß geschrieben hab !? Hier ist nochmal der Code in Java Tags:


Java:
import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;
import java.sql.*;
import java.util.ArrayList;
import java.sql.*;
import java.util.*;

public class InsertFileDataAsBLOB {

static String[] set = null; 
static String url = "jdbc:oracle:thin:@xxx:1521:xxx";
static String userid = "xxx";
static String password = "xxx";
static Connection con = null;

public static void main(String[] args) throws Exception {

Connection con = getOracleJDBCConnection();
if(con!= null){
System.out.println("Verbindung zur Datenbank xxx hergestellt !");

Statement st=con.createStatement();
FileInputStream fstream = new FileInputStream ("C:/Users/xxx/Desktop/Incoming.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
ArrayList list=new ArrayList();
while ((strLine = br.readLine()) != null){
list.add(strLine);
}
Iterator itr;
for (itr=list.iterator(); itr.hasNext(); ){
String str=itr.next().toString(); 
String [] splitSt =str.split(" ");
String Datenbank="",IP=""; 
for (int i = 0 ; i < splitSt.length ; i++) {
Datenbank=splitSt[0];


}
System.out.println(Datenbank); // Zeigt alle Datenbank Versionen an !

int k=st.executeUpdate("UPDATE ANWENDUNG SET DBTYP = '"+Datenbank+"'");
// Dieses Update schreibt nur den letzten Wert der Schleife in die DB 

}
}else{
System.out.println("Kann keine Verbindung zur Datenbank herstellen !");
}
}

public static Connection getOracleJDBCConnection(){

try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

for(Enumeration<Driver> e=DriverManager.getDrivers(); e.hasMoreElements(); )
System.out.println(e.nextElement().getClass().getName());

} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());

}try {
con = DriverManager.getConnection(url, userid, password);
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}

return con; 
} 
}
 
Ah sorry, die Tags hab ich natürlich in der Eile vergessen. Variablen schreibt man klein, richtig. Kann aber grad keine finden die ich Groß geschrieben hab !? Hier ist nochmal der Code in Java Tags:

String Datenbank="",IP=""; ???
Und was hat das debugen gebracht...

Solltest dein Java Code mal formatieren, dan erkennt man auch was😉
 
Zuletzt bearbeitet von einem Moderator:
Ach die String´s meinst du. Ich achte schon darauf, dass ich die Datentypen welche ich deklariere klein Schreibe. Die String´s hatte ich außer acht gelassen.
Auf deinen Rat hin hab ich den Debugger durchlaufen lassen. Dieser läuft ganz normal durch das Programm durch und gibt mir die Werte aus wie ich sie auch brauche. Nur wenn ich das halt in die DB Schreiben möchte, schreibt er immer nur den ersten oder den letzten Wert der Ausgabe hinein, je nachdem wo ich die executeUpdate Zeile halt hinschreibe.
Hab auch schon einige Sachen durch probiert, leider bin ich bisher noch nicht auf die Lösung gekommen.
 
Kannst Du bitte mal die Zeile
Java:
int k=st.executeUpdate("UPDATE ANWENDUNG SET DBTYP = '"+Datenbank+"'");
abändern in
Java:
		System.out.println("UPDATE ANWENDUNG SET DBTYP = '"+Datenbank+"'");
und uns mitteilen, was da raus kommt?
 
Lass mal dein k ausgeben...
Hast du irgendwo ein commit gemacht?

Außerdem würde ich bei einer Oracle Datenbank den OracleDriver nehmen
 
Erst einmal vielen Dank an Turtle und SirWayne ! Nachdem ich mir an diversen stellen System.out´s gesetzt habe und mir verschiedene Variablen an verschiedenen Stellen habe ausgeben lassen, hab ich es nun endlich mit Hilfe eines Kollegen gelöst !
Natürlich möchte ich euch den funktionierenden Code wie ich nun ein Textfile auslese und in eine Oracle Datenbank schreibe nicht vorenthalten !

Hier nun meine Klasse:

Java:
import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;
import java.sql.*;
import java.util.ArrayList;
import java.sql.*;

	public class InsertFileDataAsBLOB {
		
	    static String[] set = null; 
	    static String url = "jdbc:oracle:thin:@xxx.de:1521:xxx";
	    static String userid = "xxx";
	    static String password = "xxx";
	    static Connection con = null;
	    
	    public static void main(String[] args) throws Exception {
	    
	    	 Connection con = getOracleJDBCConnection();
	           if(con!= null){
	           System.out.println("Verbindung zur Datenbank xxx hergestellt !");
	          
	           Statement st=con.createStatement();
	           FileInputStream fstream = new FileInputStream("C:/Users/xxx/Desktop/Incoming.txt");
	           DataInputStream in = new DataInputStream(fstream);
	           BufferedReader br = new BufferedReader(new InputStreamReader(in));
	           String strLine;
	           ArrayList list=new ArrayList();
	           while ((strLine = br.readLine()) != null){
	        	   list.add(strLine);
	           }
	           Iterator itr;
	           for (itr=list.iterator(); itr.hasNext(); ){
	        	   String str=itr.next().toString(); 
	        	   String datenbank="",sid="";
	        	   String [] splitSt =str.split(";");
	        	   sid = splitSt[0];
        		   datenbank = splitSt[1];
        		   		if (datenbank.length() > 42 ) datenbank = datenbank.substring(1, 42);
        		   		boolean k = st.execute("UPDATE ANWENDUNG SET DBTYP = '"+datenbank+"' WHERE     SID  = '"+sid+"' ");
	        	 }
	        }else{
	            System.out.println("Kann keine Verbindung zur Datenbank herstellen !");
	        }
	    }
	 
	    public static Connection getOracleJDBCConnection(){
	 
	        try {
	            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	                    
	            for(Enumeration<Driver> e=DriverManager.getDrivers(); e.hasMoreElements(); )
	                System.out.println(e.nextElement().getClass().getName());
	                   
	        } catch(java.lang.ClassNotFoundException e) {
	            System.err.print("ClassNotFoundException: ");
	            System.err.println(e.getMessage());
	        
	    }try {
	           con = DriverManager.getConnection(url, userid, password);
	        } catch(SQLException ex) {
	            System.err.println("SQLException: " + ex.getMessage());
	        }
	 
	        return con;   
	    } 
	}
 

Zurück
Oben