# 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler



## Scumacker (8. Dez 2011)

Hallo,

ich muss mehrere Datenbanken mit den gleichen Tabellen zusammenführen. Dazu hab ich mir ein kleines JAVA-Programm geschrieben. Erst importiere ich mit Access 2010 die eine Datenbank in die andere. Da die Tabellen die gleichen Tabellennamen haben, wird automatisch eine 1 hinter die Namen der eingefügten Tabellen geschrieben. Erst werden alle Tabellennamen ausgelesen, dann schaue ich, ob es den gleichen Namen nochmal mit einer 1 dahinter gibt. Wenn ja, wird der INSERT INTO Befehl ausgeführt und anschließend die Tabelle1 gelöscht. Ich bekomme jedoch immer eine Fehlermeldung. "General Error"!
Das Programm sieht so aus:


```
import java.net.URL;
import java.sql.*;
import java.util.*;

import javax.swing.text.TabExpander;

class TEST
{
	public static Connection connection; 
	
	public static void main (String args[])
	{
		try
		{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

			connection = DriverManager.getConnection("jdbc:odbc:AccessDatenbank", "Name", "Passwort");
			
			List<String> Tablenames = new ArrayList<String>();
			 
			DatabaseMetaData dbmd = connection.getMetaData();
			
		    String[] types = {"TABLE"};
		    ResultSet resultSet = dbmd.getTables(null, null, "%", types);

		   
		    while (resultSet.next()) {
		      Tablenames.add(resultSet.getString(3));
		      
		      //String tableCatalog = resultSet.getString(1);
		      // String tableSchema = resultSet.getString(2)
		    }
		   
		    for (String item: Tablenames){
		    	if (Tablenames.contains(item + "1")){
		    		Statement statement = connection.createStatement();
		    		String sql = "INSERT INTO " + item + " SELECT * FROM " + item + "1";
		    		statement.executeUpdate(sql);
		    		System.out.println(item);
		    		String sql1 = "DROP TABLE " + item + "1";
		    		statement.execute(sql1);
		    	}

		    }
			connection.close();
		} catch(java.lang.ClassNotFoundException e)
		{
			System.out.println("JDBC-ODBC-Treiber nicht gefunden");
		} catch(java.sql.SQLException e)
		{
			System.out.println("Fehler beim Abfragen der Datenbank");
		}
	}
	
	
}
```


Ich bitte um Hilfe! Ich mach da schon seit drei Tagen rum und es klappt einfach nicht!!


----------



## parabool (8. Dez 2011)

Bei löschen der Tabelle  executeUpdate statt execute ?


----------



## Scumacker (8. Dez 2011)

Danke für die schnelle Antwort,

aber daran kanns nicht liegen. Der Fehler ist schon beim INSERT INTO. Das löschen alleine funktioniert!
Wenn ich das SQL-Statement in Access ausprobiere funktioniert es auch! Aber da müsste ich es eben für alle Tabellen einzeln machen und immer die Tabellennamen in dem Statement von Hand ändern. Ich verstehe nicht, warum es nicht funktioniert. 

Grüße


----------



## parabool (8. Dez 2011)

Wenn die Tabellen einen primärschlüsseln haben dann kommt es beim insert bei Datensätzen mit gleichen ps  in Quell - und >Zieltabelle (autoincrement?) vllt. zur kollision. Allerdings bei der unspez. Fehlermeldung...


----------



## Scumacker (8. Dez 2011)

Was mich eben verwirrt ist, dass der SQL Befehl funktioniert, wenn ich ihn im Access teste.
Also kann es doch an dem nicht liegen??!! 

Vielleicht hat ja jemand ne andere Idee, wie ich zwei Datenbanken zusammenführen könnte. Wie ich es mache ist eigentlich egal. Es sollte eben funktionieren. 

Danke


----------



## Evil-Devil (9. Dez 2011)

Ich würde eher den Weg einschlagen die Tabellen Definitionen in einer dritten Datenbank zu erzeugen und dann jede zu importierende Datenbank einbinden und entsprechende Insert Select Statements zu fahren. 

Allerdings wirst du mit den Primärschlüsseln ein Problem bekommen. Oder gibt es keine eindeutigen IDs?


//edit: Beitrag Nr 500 ^^


----------

