{"id":509,"date":"2024-11-15T10:40:02","date_gmt":"2024-11-15T09:40:02","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=509"},"modified":"2024-12-03T10:47:09","modified_gmt":"2024-12-03T09:47:09","slug":"konvertieren-eines-jdbc-resultsets-in-csv","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=509","title":{"rendered":"Konvertieren eines JDBC-ResultSets in CSV"},"content":{"rendered":"\n<p>Das Arbeiten mit Datenbanken ist ein zentraler Bestandteil vieler Anwendungen. Eine h\u00e4ufige Aufgabe ist die Umwandlung von Datenbankabfragen in ein Dateiformat wie CSV (Comma-Separated Values), das sowohl f\u00fcr maschinelle Verarbeitung als auch f\u00fcr den menschlichen Zugriff geeignet ist. Dieser Artikel erkl\u00e4rt, wie Sie ein JDBC-ResultSet in eine CSV-Datei konvertieren k\u00f6nnen, und zeigt dabei zwei Ans\u00e4tze: die h\u00e4ndische Implementierung und die Nutzung der <strong>OpenCSV-Bibliothek<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist ein ResultSet?<\/h3>\n\n\n\n<p>Ein <strong>ResultSet<\/strong> ist eine Klasse der JDBC-API, die die Ergebnisse einer SQL-Abfrage repr\u00e4sentiert. Es erm\u00f6glicht den Zugriff auf Zeilen und Spalten der Abfrage und bietet Methoden wie <code>getString<\/code>, <code>getInt<\/code> oder <code>getDate<\/code>, um Daten aus der Datenbank abzurufen. Ein typischer Anwendungsfall f\u00fcr ein ResultSet sieht wie folgt aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Connection connection = DriverManager.getConnection(<span class=\"hljs-string\">\"jdbc:your_database_url\"<\/span>, <span class=\"hljs-string\">\"username\"<\/span>, <span class=\"hljs-string\">\"password\"<\/span>);\nStatement statement = connection.createStatement();\nResultSet resultSet = statement.executeQuery(<span class=\"hljs-string\">\"SELECT * FROM your_table\"<\/span>);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Warum CSV?<\/h3>\n\n\n\n<p>CSV ist eines der am weitesten verbreiteten Formate f\u00fcr den Austausch tabellarischer Daten. Die Vorteile von CSV sind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Einfachheit<\/strong>: CSV-Dateien sind leicht zu erstellen und zu bearbeiten.<\/li>\n\n\n\n<li><strong>Kompatibilit\u00e4t<\/strong>: Sie k\u00f6nnen CSV-Dateien mit einer Vielzahl von Programmen und Programmiersprachen verarbeiten.<\/li>\n\n\n\n<li><strong>Lesbarkeit<\/strong>: Menschen k\u00f6nnen CSV-Dateien mit einem einfachen Texteditor lesen.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Vorgehensweise: ResultSet in CSV konvertieren<\/h3>\n\n\n\n<p>Im Folgenden werden zwei Ans\u00e4tze zur Konvertierung eines ResultSets in eine CSV-Datei vorgestellt:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>H\u00e4ndisch mit der Java-IO-API<\/strong>: Direkte Umsetzung ohne externe Bibliotheken.<\/li>\n\n\n\n<li><strong>Mit der OpenCSV-Bibliothek<\/strong>: Eine elegantere L\u00f6sung, die Fehlerbehandlung und Sonderzeichen automatisch ber\u00fccksichtigt.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Methode 1: H\u00e4ndische Implementierung mit Java-IO<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Vorbereitung<\/h4>\n\n\n\n<p>Bevor Sie beginnen, stellen Sie sicher, dass:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der JDBC-Treiber Ihrer Datenbank verf\u00fcgbar ist.<\/li>\n\n\n\n<li>Eine Datenbankverbindung hergestellt werden kann.<\/li>\n\n\n\n<li>Sie die Datei an einem geeigneten Ort speichern k\u00f6nnen.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Implementierung<\/h4>\n\n\n\n<p>Die h\u00e4ndische Umsetzung besteht aus drei Hauptschritten:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Datenbankverbindung aufbauen und Abfrage ausf\u00fchren<\/strong>.<\/li>\n\n\n\n<li><strong>Spaltennamen aus dem <code>ResultSetMetaData<\/code> abrufen<\/strong>.<\/li>\n\n\n\n<li><strong>Daten iterieren und in die CSV-Datei schreiben<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>Hier ein Beispielcode:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.io.FileWriter;\n<span class=\"hljs-keyword\">import<\/span> java.sql.*;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ResultSetToCSVManual<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> url = <span class=\"hljs-string\">\"jdbc:mysql:\/\/localhost:3306\/db_name\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> user = <span class=\"hljs-string\">\"username\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> password = <span class=\"hljs-string\">\"password\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> query = <span class=\"hljs-string\">\"SELECT * FROM your_table\"<\/span>;\n\n        <span class=\"hljs-keyword\">try<\/span> (Connection connection = DriverManager.getConnection(url, user, password);\n             Statement statement = connection.createStatement();\n             ResultSet resultSet = statement.executeQuery(query);\n             FileWriter writer = <span class=\"hljs-keyword\">new<\/span> FileWriter(<span class=\"hljs-string\">\"output.csv\"<\/span>)) {\n\n            ResultSetMetaData metaData = resultSet.getMetaData();\n            int columnCount = metaData.getColumnCount();\n\n            <span class=\"hljs-comment\">\/\/ Spaltennamen schreiben<\/span>\n            <span class=\"hljs-keyword\">for<\/span> (int i = <span class=\"hljs-number\">1<\/span>; i &lt;= columnCount; i++) {\n                writer.append(metaData.getColumnName(i));\n                <span class=\"hljs-keyword\">if<\/span> (i &lt; columnCount) writer.append(<span class=\"hljs-string\">\",\"<\/span>);\n            }\n            writer.append(<span class=\"hljs-string\">\"\\n\"<\/span>);\n\n            <span class=\"hljs-comment\">\/\/ Zeilen schreiben<\/span>\n            <span class=\"hljs-keyword\">while<\/span> (resultSet.next()) {\n                <span class=\"hljs-keyword\">for<\/span> (int i = <span class=\"hljs-number\">1<\/span>; i &lt;= columnCount; i++) {\n                    <span class=\"hljs-built_in\">String<\/span> data = resultSet.getString(i);\n                    writer.append(escapeSpecialCharacters(data));\n                    <span class=\"hljs-keyword\">if<\/span> (i &lt; columnCount) writer.append(<span class=\"hljs-string\">\",\"<\/span>);\n                }\n                writer.append(<span class=\"hljs-string\">\"\\n\"<\/span>);\n            }\n\n            System.out.println(<span class=\"hljs-string\">\"CSV-Datei wurde erfolgreich erstellt!\"<\/span>);\n\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    private <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-built_in\">String<\/span> escapeSpecialCharacters(<span class=\"hljs-built_in\">String<\/span> data) {\n        <span class=\"hljs-keyword\">if<\/span> (data == <span class=\"hljs-literal\">null<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> escapedData = data.replaceAll(<span class=\"hljs-string\">\"\\\"\"<\/span>, <span class=\"hljs-string\">\"\\\"\\\"\"<\/span>);\n        <span class=\"hljs-keyword\">if<\/span> (data.contains(<span class=\"hljs-string\">\",\"<\/span>) || data.contains(<span class=\"hljs-string\">\"\\\"\"<\/span>) || data.contains(<span class=\"hljs-string\">\"\\n\"<\/span>)) {\n            escapedData = <span class=\"hljs-string\">\"\\\"\"<\/span> + escapedData + <span class=\"hljs-string\">\"\\\"\"<\/span>;\n        }\n        <span class=\"hljs-keyword\">return<\/span> escapedData;\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Methode 2: Nutzung der OpenCSV-Bibliothek<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Was ist OpenCSV?<\/h4>\n\n\n\n<p>OpenCSV ist eine Java-Bibliothek, die das Lesen und Schreiben von CSV-Dateien vereinfacht. Sie bietet Funktionen wie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Automatische Maskierung von Sonderzeichen (z. B. Kommas und Anf\u00fchrungszeichen).<\/li>\n\n\n\n<li>Unterst\u00fctzung f\u00fcr verschiedene Zeichencodierungen.<\/li>\n\n\n\n<li>Integration mit JavaBeans f\u00fcr Mapping.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Vorbereitung<\/h4>\n\n\n\n<p>Zun\u00e4chst m\u00fcssen Sie OpenCSV in Ihr Projekt integrieren. Wenn Sie Maven verwenden, f\u00fcgen Sie diese Abh\u00e4ngigkeit zu Ihrer <code>pom.xml<\/code> hinzu:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>com.opencsv<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>opencsv<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>5.7.1<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Implementierung mit OpenCSV<\/h4>\n\n\n\n<p>Die Verwendung von OpenCSV reduziert den Implementierungsaufwand erheblich:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.opencsv.CSVWriter;\n\n<span class=\"hljs-keyword\">import<\/span> java.io.FileWriter;\n<span class=\"hljs-keyword\">import<\/span> java.sql.*;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ResultSetToCSVOpenCSV<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> url = <span class=\"hljs-string\">\"jdbc:mysql:\/\/localhost:3306\/db_name\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> user = <span class=\"hljs-string\">\"username\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> password = <span class=\"hljs-string\">\"password\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> query = <span class=\"hljs-string\">\"SELECT * FROM your_table\"<\/span>;\n\n        <span class=\"hljs-keyword\">try<\/span> (Connection connection = DriverManager.getConnection(url, user, password);\n             Statement statement = connection.createStatement();\n             ResultSet resultSet = statement.executeQuery(query);\n             FileWriter fileWriter = <span class=\"hljs-keyword\">new<\/span> FileWriter(<span class=\"hljs-string\">\"output_opencsv.csv\"<\/span>);\n             CSVWriter csvWriter = <span class=\"hljs-keyword\">new<\/span> CSVWriter(fileWriter)) {\n\n            ResultSetMetaData metaData = resultSet.getMetaData();\n            int columnCount = metaData.getColumnCount();\n\n            <span class=\"hljs-comment\">\/\/ Header schreiben<\/span>\n            <span class=\"hljs-built_in\">String<\/span>&#91;] header = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">String<\/span>&#91;columnCount];\n            <span class=\"hljs-keyword\">for<\/span> (int i = <span class=\"hljs-number\">1<\/span>; i &lt;= columnCount; i++) {\n                header&#91;i - <span class=\"hljs-number\">1<\/span>] = metaData.getColumnName(i);\n            }\n            csvWriter.writeNext(header);\n\n            <span class=\"hljs-comment\">\/\/ Zeilen schreiben<\/span>\n            <span class=\"hljs-keyword\">while<\/span> (resultSet.next()) {\n                <span class=\"hljs-built_in\">String<\/span>&#91;] row = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">String<\/span>&#91;columnCount];\n                <span class=\"hljs-keyword\">for<\/span> (int i = <span class=\"hljs-number\">1<\/span>; i &lt;= columnCount; i++) {\n                    row&#91;i - <span class=\"hljs-number\">1<\/span>] = resultSet.getString(i);\n                }\n                csvWriter.writeNext(row);\n            }\n\n            System.out.println(<span class=\"hljs-string\">\"CSV-Datei wurde erfolgreich mit OpenCSV erstellt!\"<\/span>);\n\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Vergleich: H\u00e4ndische Implementierung vs. OpenCSV<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Kriterium<\/strong><\/th><th><strong>H\u00e4ndisch<\/strong><\/th><th><strong>OpenCSV<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Komplexit\u00e4t<\/strong><\/td><td>Hoch (erfordert mehr Code)<\/td><td>Niedrig (weniger Code)<\/td><\/tr><tr><td><strong>Fehlerbehandlung<\/strong><\/td><td>Manuell erforderlich<\/td><td>Automatisch integriert<\/td><\/tr><tr><td><strong>Leistungsf\u00e4higkeit<\/strong><\/td><td>Gut, aber abh\u00e4ngig von Optimierungen<\/td><td>Vergleichbar, mit geringem Overhead<\/td><\/tr><tr><td><strong>Flexibilit\u00e4t<\/strong><\/td><td>Hohe Anpassungsm\u00f6glichkeiten<\/td><td>Standardisiert, Erweiterungen m\u00f6glich<\/td><\/tr><tr><td><strong>Zus\u00e4tzliche Bibliothek<\/strong><\/td><td>Nicht erforderlich<\/td><td>Erfordert OpenCSV-Abh\u00e4ngigkeit<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>Die Konvertierung eines JDBC-ResultSets in eine CSV-Datei ist eine h\u00e4ufige Anforderung in datengetriebenen Anwendungen. W\u00e4hrend die h\u00e4ndische Implementierung mehr Kontrolle bietet, ist die Nutzung von OpenCSV einfacher und weniger fehleranf\u00e4llig. Welche Methode Sie w\u00e4hlen, h\u00e4ngt von den spezifischen Anforderungen Ihres Projekts ab. F\u00fcr einfache bis mittlere Anwendungen ist OpenCSV eine hervorragende Wahl, da es die Entwicklung beschleunigt und gleichzeitig robuste CSV-Ausgaben gew\u00e4hrleistet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Arbeiten mit Datenbanken ist ein zentraler Bestandteil vieler Anwendungen. Eine h\u00e4ufige Aufgabe ist die Umwandlung von Datenbankabfragen in ein Dateiformat wie CSV (Comma-Separated Values), das sowohl f\u00fcr maschinelle Verarbeitung als auch f\u00fcr den menschlichen Zugriff geeignet ist. Dieser Artikel erkl\u00e4rt, wie Sie ein JDBC-ResultSet in eine CSV-Datei konvertieren k\u00f6nnen, und zeigt dabei zwei Ans\u00e4tze: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-509","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=509"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/509\/revisions"}],"predecessor-version":[{"id":510,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/509\/revisions\/510"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}