Inhaltsverzeichnis
Java Als Mehrzwecksprache ermöglicht es uns neben den verschiedenen Funktionalitäten, die wir erreichen können, auch mit der Persistenz von Daten zu arbeiten Datenbanken die es auf dem Markt gibt.EIN Datenbank Dies kann so einfach sein wie ein Schlüssel-Wert-System in einer reinen Textdatei, aber auch komplexere und modernere Lösungen wie nicht-relationale. Dies macht die Entwicklung verschiedener Verbindungsschemas zu einer obligatorischen Funktion.
JDBC sind eine Reihe von Klassen, die es erlauben Java Verbindungen mit Datenbank-Engines herstellen, dies ermöglicht es uns, die Ergebnisse der Abfragen in einem Objekt namens . zu erhalten Ergebnismenge.
Da jeder Motor anders ist, ist es wahrscheinlich, dass die Ergebnismenge die wir erhalten, ist spezifisch, deshalb ist es für uns nicht bequem, unsere Anwendung um dieses Objekt herum zu strukturieren.
Um dieses Problem zu lösen, können wir das sogenannte a Zugriffsobjekt, mit denen wir die verschiedenen Formen unserer Ergebnismenge damit Ihre Anwendung innerhalb unseres Programms einfacher zu implementieren ist und der Entwickler somit weniger Probleme hat.
Das DAO-DesignmusterDas Datenzugriffsobjekt oder DAO Es ist ein Entwurfsmuster, das das sammelt, was wir im vorherigen Punkt erklärt haben. Dies erfordert, dass wir eine Zugriffsklasse auf die Eigenschaften unserer erstellen Datenbank. Damit dies funktioniert, müssen wir die ganze Arbeit machen JDBC und dem Controller, der es uns ermöglicht, eine Verbindung mit der gewünschten Engine herzustellen, zusätzlich müssen wir die logische Implementierung durchführen, die wir erklären, um eine Abhängigkeit von bestimmten Komponenten zu vermeiden, die uns die Migration zu einer anderen Datenbank-Engine nur erschweren würde.
Das erste, was wir tun müssen, um eine Verbindung aufzubauen JDBC besteht darin, die Engine zu identifizieren, zu der wir die Verbindung herstellen möchten, und dann die erforderlichen Klassen für diese Verbindung zu erhalten. In diesem Fall werden wir eine Verbindung herstellen MySQL, diese Engine ist leicht, kostenlos und plattformübergreifend, sodass wir sie sowohl in Windows, Linux oder Mac.
Stecker / J ist die Reihe von Klassen, die vom Entwicklerteam von . angeboten werden MySQL, mit ihnen können wir machen JDBC arbeite damit zusammen Datenbanken relational, um es in unser Projekt zu integrieren, müssen wir die folgenden Schritte ausführen.
1- Wir müssen entweder die Datei herunterladen, die unserer Plattform entspricht Fenster oder für andere von der offiziellen Website von MySQL Im folgenden Link.
VERGRÖSSERN
3- Jetzt testen wir, ob auf unserem Computer alles richtig funktioniert. Dazu erstellen wir einen kleinen Code, in dem wir sehen, ob Stecker / J wurde erfolgreich in unser System geladen, dafür verwenden wir den folgenden Code:
öffentliche Klasse ConnectionTest {öffentliche statische void main (String [] args) {try {Klasse c = Class.forName ("com.mysql.jdbc.Driver"); System.out.println ("Geladene Klasse:" + c.getName ()); } catch (ClassNotFoundException ex) {System.err.println (ex); }}}
4- Um dieses Beispiel auszuführen, müssen wir die Abhängigkeit einschließen, es wird empfohlen, dass wir die .Krug im gleichen Pfad unserer Datei TestConexion.java. Wenn dies abgedeckt ist, werden wir unsere Datei kompilieren, wir öffnen eine Konsole und mit der Anweisung javac und das hinzufügen .Krug zum Klassenpfad zur Laufzeit mit dem Befehl -cp Wir können es tun, sehen wir uns die Befehlszeile an:
javac -cp mysql-connector-java-5.1.34-bin.jar ConnectionTest.java
5- Um unsere Datei schließlich auszuführen, müssen wir nur die folgende Anweisung ausführen:
java -cp mysql-connector-java-5.1.34-bin.jar TestConnection
Wenn wir in unserer Konsole ein Ergebnis wie das folgende haben, können wir mit Operationen beginnen, um zu Datenbanken:
VERGRÖSSERN
CREATE TABLE IF NOT EXISTS `users` (
`id` bigint (20) NOT NULL AUTO_INCREMENT,
`name` varchar (255) NICHT NULL,
`date` Datum NICHT NULL,
`state` int (11) NICHT NULL,
PRIMÄRSCHLÜSSEL (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 3;
INSERT IN `users` (` id`, `name`,` date`, `status`) VALUES
(1, 'Benutzer 1', '2015-01-01', 1),
(2, 'Benutzer 2', '2015-01-01', 1);
Jetzt im folgenden Code von Java Wir werden uns darauf konzentrieren, die Verbindung zu den Datenbank, dafür mit a versuche Block zu fangen Wir werden überprüfen, ob es effektiv und fehlerfrei ist, und wenn die Verbindung hergestellt wurde, drucken wir eine Erfolgsmeldung, mal sehen:
java.sql.Connection importieren; java.sql.DriverManager importieren; öffentliche Klasse ConnectionTest {privat statisch final String path = "jdbc: mysql: // localhost"; private static final String user = "unser Benutzer"; private static final String password = "unser Passwort"; public static void main (String [] args) {try {Connection con = DriverManager.getConnection (path, user, password); System.out.println ("Verbindung erfolgreich"); } catch (Ausnahme e) {e.printStackTrace (); }}}
Aus diesem Code können wir sehen, dass wir zwei Bibliotheken aus dem Paket importieren müssen java.sql, einer ist Verbindung die für die Verwaltung aller Aktivitäten verantwortlich ist, um mit der Datenbank kommunizieren zu können, und die andere ist Gerätemanager die dafür verantwortlich ist, die Art und Weise bereitzustellen, wie wir mit ihr kommunizieren. Wenn wir die Schritte richtig befolgt haben, sollten wir die folgende Meldung sehen, wenn wir unser Beispiel in der Konsole ausführen:
VERGRÖSSERN
java.sql.Connection importieren; java.sql.DriverManager importieren; java.sql.ResultSet importieren; java.sql.Anweisung importieren; öffentliche Klasse ConnectionTest {privat statisch final String path = "jdbc: mysql: // localhost / test"; private static final String user = "unser Benutzer"; private static final String password = "unser Passwort"; public static void main (String [] args) {try {Connection con = DriverManager.getConnection (Pfad, Benutzer, Passwort); Anweisungsabfrage = con.createStatement (); System.out.println ("Verbindung erfolgreich"); ResultSet result = query.executeQuery ("SELECT * FROM users"); while (result.next ()) {String name = result.getString ("name"); String date = result.getString ("Datum"); System.out.println ("Name:" + Name + "Aufzeichnungsdatum:" + Datum); } result.close (); abfrage.schließen (); con.close (); } catch (Ausnahme e) {e.printStackTrace (); }}}
Es ist wichtig zu erwähnen, dass in unserem Attribut Route Wir haben es geändert und den Namen des Datenbank Forderung Prüfung wo wir unsere Benutzertabelle erstellen, unsere Datei kompilieren und ausführen müssen, wäre das Ergebnis per Konsole wie im folgenden Bild zu sehen:
VERGRÖSSERN
VorteilDies hat mehrere Vorteile, wir haben bereits gesagt, dass der erste darin besteht, etwas verwenden zu können, ohne es zu wiederholen, aber es dient auch der Sicherheit, da wir so die Werte behandeln können, die möglicherweise aus Benutzereingaben stammen, um einen Angriff auf unsere zu vermeiden Datenbank, zusätzlich können wir auch die Lesbarkeit unseres Programms erleichtern.
Im folgenden Beispiel erstellen wir eine Abfrage mit Vorbereitete Erklärung, damit es während unseres Programms mehrmals verwendet werden kann. Sehen wir uns den resultierenden Code an:
java.sql.Connection importieren; java.sql.DriverManager importieren; java.sql.ResultSet importieren; import java.sql.PreparedStatement; public class PreparedStatementTest {private static final String path = "jdbc: mysql: // localhost / test"; private static final String user = "unser Benutzer"; private static final String password = "unser Passwort"; public static void main (String [] args) {try {Connection con = DriverManager.getConnection (path, user, password); PreparedStatement query = con.prepareStatement ("SELECT * FROM users Where id =?;"); System.out.println ("Verbindung erfolgreich"); query.setInt (1, 1); ResultSet result = query.executeQuery (); while (result.next ()) {String name = result.getString ("name"); String date = result.getString ("Datum"); System.out.println ("Name:" + Name + "Aufnahmedatum:" + Datum); } result.close (); abfrage.schließen (); con.close (); } catch (Ausnahme e) {e.printStackTrace (); }}}
Wir bemerken, dass mit der Methode setInt Mit dem Abfrageobjekt können wir die notwendigen Parameter für die Abfrage übergeben, damit können wir sie von der Ausführung der Abfrage trennen und so Portabilität und Lesbarkeit gewinnen. Zum Abschluss kompilieren wir unser Programm und führen es aus:
VERGRÖSSERN