{"id":59,"date":"2023-09-11T16:24:05","date_gmt":"2023-09-11T15:24:05","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=59"},"modified":"2024-01-08T09:15:45","modified_gmt":"2024-01-08T08:15:45","slug":"jdbc-basics-datenbanken-in-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=59","title":{"rendered":"JDBC-Basics &#8211; Datenbanken in Java"},"content":{"rendered":"\n<p>JDBC (Java Database Connectivity) ist eine Java-API, die Entwicklern die Interaktion mit Datenbanken erm\u00f6glicht. In diesem Artikel werden wir einen detaillierten Blick auf die Basics werfen, wie Sie auf Datenbanken in Java \u00fcber JDBC zugreifen k\u00f6nnen, einschlie\u00dflich des Herstellens von Verbindungen, Ausf\u00fchrens von Abfragen, Verwenden von Transaktionen und grundlegender Sicherheit beim Arbeiten mit SQL-Abfragen.<\/p>\n\n\n\n<p><strong>1. Einleitung zu JDBC<\/strong><\/p>\n\n\n\n<p>JDBC ist eine Java-API, die es erm\u00f6glicht, mit verschiedenen relationalen Datenbanken zu interagieren. Es bietet eine standardisierte Methode zum Verbindungsaufbau und zur Ausf\u00fchrung von SQL-Anweisungen. Der Kern von JDBC besteht aus den Klassen und Interfaces, die es erm\u00f6glichen, eine Verbindung zur Datenbank herzustellen, Abfragen auszuf\u00fchren und Transaktionen zu verwalten.<\/p>\n\n\n\n<p><strong>2. Schritt A: Herstellen einer Verbindung zur Datenbank<\/strong><\/p>\n\n\n\n<p>Der erste Schritt beim Arbeiten mit JDBC ist das Herstellen einer Verbindung zur Datenbank. Dies geschieht durch Laden des JDBC-Treibers und Bereitstellen von Verbindungsinformationen. Hier ist ein Beispiel f\u00fcr den Verbindungsaufbau zu einer PostgreSQL-Datenbank:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.SQLException;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DatabaseConnector<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String JDBC_URL = <span class=\"hljs-string\">\"jdbc:postgresql:\/\/localhost:5432\/deineDatenbank\"<\/span>;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String USERNAME = <span class=\"hljs-string\">\"deinBenutzername\"<\/span>;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> String PASSWORD = <span class=\"hljs-string\">\"deinPasswort\"<\/span>;\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> Connection getConnection() throws SQLException {\n        <span class=\"hljs-keyword\">return<\/span> DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Stellen Sie sicher, dass der PostgreSQL JDBC-Treiber f\u00fcr die spezifische Datenbank in Ihrem Klassenpfad enthalten ist.<\/p>\n\n\n\n<p><strong>3. Schritt B: Ausf\u00fchren von Abfragen<\/strong><\/p>\n\n\n\n<p>Nachdem die Verbindung hergestellt wurde, k\u00f6nnen Sie SQL-Abfragen ausf\u00fchren. Verwenden Sie dazu das <code>Statement<\/code>-Objekt. Hier ist ein Beispiel f\u00fcr das Abrufen von Daten aus einer Tabelle:<\/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.sql.Connection;\n<span class=\"hljs-keyword\">import<\/span> java.sql.ResultSet;\n<span class=\"hljs-keyword\">import<\/span> java.sql.SQLException;\n<span class=\"hljs-keyword\">import<\/span> java.sql.Statement;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DataRetriever<\/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-keyword\">try<\/span> (Connection connection = DatabaseConnector.getConnection();\n             Statement statement = connection.createStatement()) {\n\n            <span class=\"hljs-built_in\">String<\/span> query = <span class=\"hljs-string\">\"SELECT * FROM deineTabelle\"<\/span>;\n            ResultSet resultSet = statement.executeQuery(query);\n\n            <span class=\"hljs-keyword\">while<\/span> (resultSet.next()) {\n                <span class=\"hljs-comment\">\/\/ Verarbeite die Daten hier<\/span>\n            }\n\n        } <span class=\"hljs-keyword\">catch<\/span> (SQLException e) {\n            e.printStackTrace();\n        }\n    }\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<p><strong>3. Schritt C: Ausf\u00fchren von Abfragen und Verwenden von Transaktionen<\/strong><\/p>\n\n\n\n<p>Nachdem die Verbindung hergestellt wurde, k\u00f6nnen Sie SQL-Abfragen ausf\u00fchren und Transaktionen verwalten. Hier ist ein Beispiel f\u00fcr die Verwendung von Transaktionen zum Einf\u00fcgen von Daten:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.sql.Connection;\n<span class=\"hljs-keyword\">import<\/span> java.sql.SQLException;\n<span class=\"hljs-keyword\">import<\/span> java.sql.Statement;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TransactionExample<\/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-keyword\">try<\/span> (Connection connection = DatabaseConnector.getConnection();\n             Statement statement = connection.createStatement()) {\n\n            <span class=\"hljs-comment\">\/\/ Deaktiviere den automatischen Commit-Modus<\/span>\n            connection.setAutoCommit(<span class=\"hljs-literal\">false<\/span>);\n\n            <span class=\"hljs-keyword\">try<\/span> {\n                <span class=\"hljs-comment\">\/\/ F\u00fchre mehrere SQL-Anweisungen aus<\/span>\n\n                statement.executeUpdate(<span class=\"hljs-string\">\"INSERT INTO deineTabelle VALUES (1, 'Daten 1')\"<\/span>);\n                statement.executeUpdate(<span class=\"hljs-string\">\"INSERT INTO deineTabelle VALUES (2, 'Daten 2')\"<\/span>);\n\n                <span class=\"hljs-comment\">\/\/ Wenn alles erfolgreich ist, best\u00e4tige die Transaktion<\/span>\n                connection.commit();\n            } <span class=\"hljs-keyword\">catch<\/span> (SQLException e) {\n                <span class=\"hljs-comment\">\/\/ Bei einem Fehler, mache die Transaktion r\u00fcckg\u00e4ngig<\/span>\n                connection.rollback();\n                e.printStackTrace();\n            }\n\n        } <span class=\"hljs-keyword\">catch<\/span> (SQLException e) {\n            e.printStackTrace();\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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<p>In diesem Beispiel wird der automatische Commit-Modus deaktiviert, und nach erfolgreichem Einf\u00fcgen von Daten wird die Transaktion best\u00e4tigt. Im Falle eines Fehlers wird die Transaktion r\u00fcckg\u00e4ngig gemacht.<\/p>\n\n\n\n<p><strong>4. Sicherheitshinweis zu SQL-Injections<\/strong><\/p>\n\n\n\n<p>Wichtig, potenzielle Sicherheitsl\u00fccke! Direkte Einbettung von Benutzereingaben in SQL-Abfragen kann zu unerw\u00fcnschten Folgen f\u00fchren, da ein Benutzer wom\u00f6glich SQL-Steuerzeichen wie Quotes, Semikolon usw. \u00fcber die Benutzereingabe in den SQL-String einschleusen k\u00f6nnte, woraufhin er mit allen Rechten der Applikation beliebige SQL-Abfragen ausf\u00fchren kann. Um dies zu verhindern, sollten grunds\u00e4tzlich <strong>immer<\/strong> Prepared Statements verwendet werden.<\/p>\n\n\n\n<p><strong>Beispiel mit Prepared Statements f\u00fcr INSERT<\/strong><\/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> java.sql.Connection;\n<span class=\"hljs-keyword\">import<\/span> java.sql.PreparedStatement;\n<span class=\"hljs-keyword\">import<\/span> java.sql.SQLException;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SecureDataInserter<\/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-keyword\">try<\/span> (Connection connection = DatabaseConnector.getConnection()) {\n\n            <span class=\"hljs-comment\">\/\/ Beispiel f\u00fcr sicheres Einf\u00fcgen von Daten mit Prepared Statements<\/span>\n            <span class=\"hljs-built_in\">String<\/span> insertQuery = <span class=\"hljs-string\">\"INSERT INTO deineTabelle (spalte1, spalte2) VALUES (?, ?)\"<\/span>;\n\n            <span class=\"hljs-keyword\">try<\/span> (PreparedStatement preparedStatement = connection.prepareStatement(insertQuery)) {\n                <span class=\"hljs-comment\">\/\/ Setze die Werte sicher ein<\/span>\n                preparedStatement.setString(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-string\">\"Wert1\"<\/span>);\n                preparedStatement.setString(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-string\">\"Wert2\"<\/span>);\n\n                <span class=\"hljs-comment\">\/\/ F\u00fchre das Prepared Statement aus<\/span>\n                preparedStatement.executeUpdate();\n            }\n\n        } <span class=\"hljs-keyword\">catch<\/span> (SQLException e) {\n            e.printStackTrace();\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<p>In diesem Beispiel wird ein Prepared Statement verwendet, um Benutzereingaben sicher in die SQL-Abfrage einzuf\u00fcgen und so SQL-Injections zu verhindern. Nicht zuletzt lassen sich mit Prepared Statements auch Performance-Verbesserungen realisieren, indem Anfragen schon vorab &#8222;kompiliert&#8220; und mehrfach verwendet werden k\u00f6nnen, und Encoding-Probleme im Zusammenhang mit komplexeren Strings, Zeit-Datentypen usw. zu umgehen, da die Konvertierung solcher strukturierter Typen in Strings entf\u00e4llt.<\/p>\n\n\n\n<p><strong>5. Fazit<\/strong><\/p>\n\n\n\n<p>Der Zugriff auf Datenbanken in Java mithilfe von JDBC erfordert das Verst\u00e4ndnis der grundlegenden Schritte: Verbindungsherstellung, Ausf\u00fchrung von Abfragen und Verwaltung von Transaktionen. Durch die Verwendung von Prepared Statements kann die Sicherheit verbessert und SQL-Injections vermieden werden. Mit diesem Wissen sind Sie gut ger\u00fcstet, um leistungsf\u00e4hige Java-Anwendungen zu entwickeln, die nahtlos mit Datenbanken interagieren k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JDBC (Java Database Connectivity) ist eine Java-API, die Entwicklern die Interaktion mit Datenbanken erm\u00f6glicht. In diesem Artikel werden wir einen detaillierten Blick auf die Basics werfen, wie Sie auf Datenbanken in Java \u00fcber JDBC zugreifen k\u00f6nnen, einschlie\u00dflich des Herstellens von Verbindungen, Ausf\u00fchrens von Abfragen, Verwenden von Transaktionen und grundlegender Sicherheit beim Arbeiten mit SQL-Abfragen. 1. [&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-59","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\/59","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=59"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":61,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions\/61"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}