table copy mit java

winniwinter

Mitglied
Hi, will eine Hi, ich möchte mit Java eine DB2 table von einem System auf das andere kopieren.
Bisher greife ich auf die Datenbank zu und lese mir die genauen Informationen über die zu kopierende Tabelle aus.
er erstellt die tabelle in der richtigen datenbank. Jetzt hab ich nur noch das einzige Problem das es momentan ja nur den letzten Datentyp, Feldnamen und Datenlänge erstellt.
Hat mir da jmd ne kleine Hilfe? Könnte man das irgendwie mit einem array hinbekommen?!


Code:
try 
                    { 
                            DatabaseMetaData dmd = con.getMetaData(); 
                            smt = con.createStatement(); 
                            rst = dmd.getColumns(null,"DB2INST","KUNDEN",null); 
                            String a = null; 
                            String b = null; 
                            String c = null; 
                            String d = null; 
                            String e = null; 
                            while(rst.next()) 
                            { 
                            System.out.println(rst.getString(2) + " : " + rst.getString(3) + " : " + rst.getString(4)+ " : " + rst.getString(7)+ " : " + rst.getString(6)); 
                                    a = rst.getString(2); 
                                    b = rst.getString(3); 
                                    c = rst.getString(4); 
                                    d = rst.getString(7); 
                                    e = rst.getString(6); 
                            } 
                            con = null; 
                            smt = null; 
                            rst = null;                            
                            con = DriverManager.getConnection(url2); 
                            smt = con.createStatement(); 
                            smt.executeUpdate("CREATE TABLE " +a+ "." +b+ "( " +c+ " " +e+ "(" +d+ ") )");                            
                    }
 
hi, habe das plugin nun getestet. Bei grösseren Datenbanken bricht es leider nach einiger Zeit ab. Mein maximum waren 91.000 Datensätze. Was grad mal 1/3 entspricht :(
Nun hab ich mir mal mein eigenes Prog zusammengebastelt.Schaut es euch doch bitte mal an, da ich kein Java Experte bin und nich weiss, wie ich es noch optimieren könnte, damit es flotter wird:

Code:
import java.sql.*;

public class copy 
{
	String driver = "";
	String driver2= "";
	String url = null;
	String url2= null;
	String tabelle = "";
	String exemplar= "";
	String getData = "SELECT * FROM DB2INST.KNA1";
	String Data2   = "SELECT * FROM DB2INST.KNA1 AS KNA1 WHERE KNA1.PSTLZ > G'70000'";
	Statement smt = null;
	ResultSet rst = null;
	Connection con = null;
	
	
	

	public copy(String location, String target, String pdriver, String pdriver2, String pexemplar, String ptabelle)
	{
	
		driver = pdriver;
		
		if(pdriver2 == null)
		{
			driver2 = driver;				
		}
		else
		{
			driver2 = pdriver2;
		}
			
		url = location;
		url2= target;
		exemplar = pexemplar;
		tabelle = ptabelle;

	
		
		try
		{
		Class.forName(driver);
		con = DriverManager.getConnection(url);
		}
		catch(Exception e)
		{
			System.out.println(e);
			return;
		}		
	}
	
	public void tablecopy()
	{
	    try
	    {	Class.forName(driver2);    	
	    	DatabaseMetaData dmd = con.getMetaData();
	    	smt = con.createStatement();
	    	rst = dmd.getColumns(null, exemplar, tabelle, null);
	    	
	    	String sqlStmt = "";
	    	
	    	int i=0;
	    	while(rst.next())
	    	{
	    		if( i == 0) {
	    			sqlStmt = "CREATE TABLE " + rst.getString(2) + "." + rst.getString(3) + " ( ";
	    			sqlStmt = sqlStmt + rst.getString(4) + " " + rst.getString(6) + "(" + rst.getString(7) + ")"; 
	    		}
	    		else {
	    			sqlStmt = sqlStmt + "," + rst.getString(4) + " " + rst.getString(6) + "(" + rst.getString(7) + ")";
	    		}	    		
	    		i++;    		
	    	}	    	
	    	sqlStmt = sqlStmt + " )";
	    	
	    	
	    	con = null;
	    	smt = null;
	    	rst = null;
	    	
	    	Class.forName(driver);
	    	con = DriverManager.getConnection(url2);
	    	smt = con.createStatement();	    	
	    	smt.executeUpdate(sqlStmt);
	    	System.out.println("a) Tabelle erfolgreich erstellt!");
	    }
	    
	    catch(Exception e)
	    {
	    	System.out.println(e);
	    }	
	}
	
	public void copyData()
	{
		String sqlfill= "";
		String sqlcmd = "";
		con = null;
		smt = null;
		rst = null;
    	
		try
		{			
			Class.forName(driver2);
		con = DriverManager.getConnection(url);
		DatabaseMetaData dmd = con.getMetaData();
    	smt = con.createStatement();
    	rst = dmd.getColumns(null, exemplar, tabelle, null);    
    	
//    	#########################
    	
    	int j = 0;
    	while(rst.next())
    	{
    			
    			if( j == 0)	
    				{
    					sqlcmd = "INSERT INTO " + rst.getString(2) + "." + rst.getString(3) + "(";
    					sqlcmd = sqlcmd + rst.getString(4); 
    					
    				}
    				else
    				{
    				sqlcmd = sqlcmd + ", " + rst.getString(4);    				
    				}
    				j++;	
    		}
    		sqlcmd = sqlcmd + ")";
    	
//    		#########################
    		
    		rst = smt.executeQuery(Data2);
    		System.out.println("    Kopiervorgang wird gestartet....");
    		int k=0;    		
    		while(rst.next())
    		{
    			if (k == 0)
    			{
    				sqlfill = sqlcmd + " VALUES(G'"+ rst.getString(1)+"', G'" +rst.getString(2)+"', G'" + rst.getString(3) + "', G'" + rst.getString(4) + "', G'"+ rst.getString(5) + "', G'"+ rst.getString(6) + "', G'"+ rst.getString(7) + "', G'"+ rst.getString(8) + "', G'"+ rst.getString(9) + "')";    				
    			}
    			else
    			{    				
    				sqlfill = sqlfill + " , (G'" + rst.getString(1) + "', G'" + rst.getString(2) + "', G'" + rst.getString(3) + "', G'" + rst.getString(4) + "', G'"+ rst.getString(5) + "', G'"+ rst.getString(6) + "', G'"+ rst.getString(7) + "', G'"+ rst.getString(8) + "', G'"+ rst.getString(9) + "')"; 			
    			}    			
    			k++;    			
    		}
    		Class.forName(driver);
    	    	con = DriverManager.getConnection(url2);
    	    	smt = con.createStatement();
    		  	smt.executeUpdate(sqlfill);
    		  	System.out.println("b) Daten erfolgreich gespeichert!");

		}
		
		catch (Exception e)
		{
			System.out.println(e);
		}		
	}
	
	public void Conclose()
	{
		try
		{
			rst.close();
			smt.close();	
			con.close();
			System.out.println("c) Vorgang erfolgreich abgeschlossen, Verbindung wird getrennt");
		}
		
		catch (Exception e)
		{
			System.out.println(e);
		}	
	}



}//class
 
Zurück