Vor einiger Zeit habe ich ein Tool benötigt, welches bei Angabe einer Datenbank alle Tables und deren Inhalte in eine CSV-Datei exportiert.
Da es für den Microsoft SQL-Server (getestet unter 2005, geht aber sicher auch mit anderen Editionen) sowas noch nicht kostenlos gab, habe ich mal schnell einen mit JDBC und JTDS geschrieben.
Das Tool konnektiert auf einen Datenbank, liest alle vorhandenen Tabellen aus und legt für jede eine eigene CSV-Datei an. Anschließend werden alle Spaltennamen in die erste Zeile geschrieben und die entsprechenden Daten in die CSV-Datei exportiert.
Hier der Code, es wird der JTDS-Treiber von hier benötigt:
importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.DataInputStream;importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.InputStreamReader;importjava.sql.Connection;importjava.sql.DatabaseMetaData;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.Collection;publicclasshelper{publicstaticvoidmain(String[]args){Connectionconn;try{Class.forName("net.sourceforge.jtds.jdbc.Driver");FileInputStreamfinputstream=newFileInputStream("helper.txt");// Get the connection dataDataInputStreamin=newDataInputStream(finputstream);BufferedReaderbr=newBufferedReader(newInputStreamReader(in));Stringserver=br.readLine();Stringdatabase=br.readLine();Stringuser=br.readLine();Stringpass=br.readLine();in.close();// Establish connectionconn=DriverManager.getConnection("jdbc:jtds:sqlserver://"+server+":1433;DatabaseName="+database+";selectMethod=cursor;sendStringParametersAsUnicode=false",user,pass);DatabaseMetaDatameta=conn.getMetaData();// Load the TablesResultSetresGetTables=meta.getTables(null,null,null,newString[]{"TABLE"});CollectioncollectionTables=newArrayList();while(resGetTables.next()){collectionTables.add(resGetTables.getString("TABLE_NAME"));}resGetTables.close();// Load the Columnsfor(StringtableName:collectionTables){FileWriterfoutputstream=newFileWriter(tableName+".csv");BufferedWriterout=newBufferedWriter(foutputstream);ResultSetresGetColumns=meta.getColumns(null,null,tableName,null);CollectioncollectionColumns=newArrayList();while(resGetColumns.next()){out.write(resGetColumns.getString("COLUMN_NAME")+";");collectionColumns.add(resGetColumns.getString("COLUMN_NAME"));}out.write("\n");// End of columns// Load the actual data:Statementstmt=conn.createStatement();ResultSetrst=stmt.executeQuery("SELECT * FROM "+tableName);while(rst.next()){for(StringcolumnName:collectionColumns){out.write(rst.getString(columnName)+";");}out.write("\n");}out.close();resGetColumns.close();}conn.close();}catch(Exceptione){System.exit(1);}}}
Für die Benutzung wird im gleichen Verzeichnis die eine Datei namens helper.txt benötigt, welche folgenden Inhalt hat:
1
2
3
4
serveradressedatenbanknutzerpasswort
Eine fertig kompilierte Version habe ich hier hochgeladen.