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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

public class helper {

 public static void main(String[] args) {
 Connection conn;
 try {
 Class.forName("net.sourceforge.jtds.jdbc.Driver");
 FileInputStream finputstream = new FileInputStream("helper.txt");
 // Get the connection data
 DataInputStream in = new DataInputStream(finputstream);
 BufferedReader br = new BufferedReader(new InputStreamReader(in));
 String server = br.readLine();
 String database = br.readLine();
 String user = br.readLine();
 String pass = br.readLine();
 in.close();
 // Establish connection
 conn = DriverManager.getConnection(
 "jdbc:jtds:sqlserver://" + server + ":1433;DatabaseName=" + database + ";selectMethod=cursor;sendStringParametersAsUnicode=false",
 user, pass);
 DatabaseMetaData meta = conn.getMetaData();

 // Load the Tables
 ResultSet resGetTables = meta.getTables(null, null, null, new String[] { "TABLE" });
 Collection collectionTables = new ArrayList();
 while (resGetTables.next()) {
 collectionTables.add(resGetTables.getString("TABLE_NAME"));
 }
 resGetTables.close();

 // Load the Columns
 for(String tableName : collectionTables) {
 FileWriter foutputstream = new FileWriter(tableName + ".csv");
 BufferedWriter out = new BufferedWriter(foutputstream);
 ResultSet resGetColumns = meta.getColumns(null, null, tableName, null);
 Collection collectionColumns = new ArrayList();
 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:
 Statement stmt = conn.createStatement();
 ResultSet rst = stmt.executeQuery("SELECT * FROM " + tableName);
 while (rst.next()) {
 for(String columnName : collectionColumns) {
 out.write(rst.getString(columnName) + ";");
 }
 out.write("\n");
 }
 out.close();
 resGetColumns.close();
 }
 conn.close();
 } catch (Exception e) {
 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
serveradresse
datenbank
nutzer
passwort

Eine fertig kompilierte Version habe ich hier hochgeladen.