Der Zweck dieses Tutorials besteht darin, eine separate Ebene in Java zu verwenden, um in einer Datenbank auf Tabellen zuzugreifen. Diese Schicht wird normalerweise als Datenzugriffsschicht (DAL) bezeichnet
Der größte Vorteil der Verwendung von DAL besteht darin, dass es den Zugriffsvorgang der Datenbank vereinfacht, indem sie einige Methoden wie Insert () und Find () direkt verwenden, anstatt zuerst Links durchzuführen und dann einige Abfragen auszuführen.
Diese Ebene behandelt alle datenbankbezogenen Anrufe und Abfragen darin.
Erstellen Sie eine Datenbank
Wir möchten eine einfache Tabelle für den Benutzer erstellen. Wir können diese Felder zum Erstellen verwenden
Id int
Name Varchar (200)
Passwort varchar (200)
Alter int
Datenübertragungsobjekt
Diese Schicht sollte eine einfache Klasse mit dem Namen Data Transfer Object (DTO) enthalten. Diese Klasse ist nur eine einfache Karte, die der Tabelle in der Datenbank entspricht, und jede Spalte in der Tabelle entspricht einer Mitgliedsvariablen der Klasse.
Unser Ziel ist es, einfache Java-Objekte zu verwenden, anstatt SQL-Anweisungen und andere Datenbankbefehle zu verarbeiten, um die Datenbank hinzuzufügen, zu löschen, zu ändern und zu überprüfen.
Wenn wir die Tabelle in Java -Code zuordnen möchten, müssen wir nur eine Klasse (Bean) erstellen, die dieselben Felder enthält.
Um besser zu verkapulieren, sollten wir neben den Konstruktoren alle Feldvariablen als privat deklarieren, Accessors (Getter und Setter) erstellen, von denen einer der Standardkonstruktor ist.
public class User {private Integer id; privater Zeichenfolge Name; privater Saitenpass; privates Ganzzahlalter;}Um Felder korrekt zu kartieren, sollten wir den Nullwert in der Datenbank berücksichtigen. Für die ursprünglichen Standardwerte von Java, wie z. B. int Typ, beträgt der Standardwert 0, sodass wir einen neuen Datentyp bereitstellen, der Nullwerte berücksichtigen kann. Wir können int durch einen speziellen Typ - Kapselungsklasse wie Ganzzahl ersetzen.
Schließlich sollte unsere Klasse so aussehen:
public class User {private Integer id; privater Zeichenfolge Name; privater Saitenpass; privates Ganzzahlalter; public user () {} public user (String -Name, String -Pass, Integer Age) {this.name = name; this.pass = pass; this.age = Alter; } public user (Ganzzahl -ID, String -Name, String -Pass, Integer Age) {this.id = id; this.name = name; this.pass = pass; this.age = Alter; } public Integer getage () {Return Age; } public void setage (Ganzzahl älter) {this.age = älter; } public Integer getId () {return id; } public void setId (Integer id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String getPass () {return pass; } public void setPass (String -Pass) {this.pass = pass; }}Eine gute Praxis besteht darin, den Standard -Leerkonstruktor, einen vollständigen Konstruktor und einen vollständigen Konstruktor ohne ID -Parameter bereitzustellen.
Stellen Sie eine Verbindung zur Datenbank her
Wir können eine Zwischenklasse verwenden, um die Verbindung zur Datenbank zu erleichtern. In dieser Klasse geben wir die Datenbankverbindungsparameter wie die Datenbank JDBC, URL, Benutzername und Kennwort an und definieren diese Variablen als endgültig (es ist besser, diese Daten von Eigenschaften oder XML -Konfigurationsdateien abzurufen).
Bietet eine Methode, um ein Verbindungsobjekt zurückzugeben oder ein Null zurückzugeben, wenn die Verbindung fehlschlägt, oder eine Laufzeitausnahme ausführt.
public static final String url = "jdbc: mysql: // localhost: 3306/testdb"; public static final String user = "testuser"; public static final String pass = "testPass";/*** Anschlussobjekt* @return Verbindungsobjekt*/Public Connection getConnection () {try {trohrmanager.register. return triverManager.getConnection (URL, Benutzer, Pass); } catch (SQLEXception ex) {neue RunTimeException werfen ("Fehler, die mit der Datenbank verbinden", Ex); }}Wir können auch eine Hauptmethode in die Klasse aufnehmen, um die Verbindung zu testen. Die komplette Klasse sieht so aus:
importieren com.mysql.jdbc.driver; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception;/** * Connect to database * @Author hany.sad */public class Connectory {public static endgültiges String -String -Url = "JDBC: MySQL: // localhost: 3306/testdb"; public static final String user = "testuser"; public static final String pass = "testPass"; / ** * eine Verbindung zur Datenbank erhalten * @return Connection Object */ public static Connection getConnection () {try {triverManager.registerDriver (neuer Treiber ()); return triverManager.getConnection (URL, Benutzer, Pass); } catch (SQLEXception ex) {neue RunTimeException werfen ("Fehler, die mit der Datenbank verbinden", Ex); }} / ** * Testverbindung * / public static void main (String [] args) {Connection Connection = ConnectionFactory.getConnection (); }}Datenzugriffsobjekt
Die DAO -Schicht kann CRUD -Operationen ausführen. Es kann unsere Tabellen hinzufügen, löschen, ändern und überprüfen.
Unsere DAO -Schichtschnittstelle sollte so aussehen:
public interface userDao {user getUser (); Set <Bener> getAllusers (); Benutzer getUserByusernAandPassword (); boolean InsertUser (); boolean updateUser (); boolean deleteUser ();}Benutzer finden
Benutzer können alle eindeutigen Felder wie ID, Name oder E -Mail überfragen. In diesem Beispiel verwenden wir ID, um den Benutzer zu finden. Der erste Schritt besteht darin, eine Verbindung über die Connector -Klasse zu erstellen und dann die Auswahlanweisung auszuführen, um den Benutzer mit seiner ID 7 zu erhalten. Wir können diese Anweisung verwenden, um den Benutzer abzufragen:
Wählen Sie * vom Benutzer, wobei ID = 7
Hier machen wir eine dynamische Anweisung, um die ID aus den Parametern zu erhalten.
Durch die Ausführung dieser Abfrage wird ein Ergebnissatz erhalten, bei dem der Benutzer oder der Null gespeichert wird. Wir können die nächste () -Ergebnismethode verwenden, um festzustellen, ob ein Wert vorhanden ist. Wenn TRUE zurückgegeben wird, werden wir weiterhin Data Getters verwenden, um Benutzerdaten vom Ergebnis zu erhalten. Wenn wir alle Daten in den Benutzer zusammenfassen, geben wir diese zurück. Wenn ein Benutzer mit dieser ID nicht vorhanden ist oder eine andere Ausnahme auftritt (z. B. eine ungültige SQL -Anweisung), gibt diese Methode NULL zurück.
public user getUser (int id) {Connection Connection = ConnectionFactory.getConnection (); try {Anweisung STMT = Connection.CreateStatement (); ResultSet rs = stmt.executeQuery ("SELECT * VON UNSER WHERE ID =" + ID); if (rs.Next ()) {user user = new user (); user.setId (rs.getInt ("id")); user.setName (rs.getString ("name")); user.setPass (Rs.GetString ("Pass")); user.Setage (rs.getInt ("Alter")); Benutzer zurückgeben; }} catch (SQLEXception ex) {ex.printstacktrace (); } return null;}Es ist bequemer, eine separate Methode zum Extrahieren von Daten aus dem Ergebnissatz zu verwenden, da wir sie in vielen Methoden aufrufen werden.
Diese neue Methode wirft eine SQLEXception aus und sollte für Einschränkungen privat sein:
private user extractUserfromResultSet (Ergebnisset RS) löst SQLEXception {user user = new user (); user.setId (rs.getInt ("id")); user.setName (rs.getString ("name")); user.setPass (Rs.GetString ("Pass")); user.Setage (rs.getInt ("Alter")); Benutzer zurückgeben;}Unsere obige Methode sollte in eine neue Methode modifiziert werden:
public user getUser (int id) {Connection Connection = ConnectionFactory.getConnection (); try {Anweisung STMT = Connection.CreateStatement (); ResultSet rs = stmt.executeQuery ("SELECT * VON UNSER WHERE ID =" + ID); if (rs.Next ()) {return extractUserFromResultSet (Rs); }} catch (SQLEXception ex) {ex.printstacktrace (); } return null;}Login -Methode
Der Anmeldevorgang ist ähnlich. Wir möchten alternative IDs und Kennwort -IDs bereitstellen, die sich nicht auf die Parameterliste und die Abfrageberichtungen auswirken. Wenn der Benutzername und das Kennwort korrekt sind, gibt diese Methode einen gültigen Benutzer zurück, ansonsten NULL. Da es viele Parameter gibt, ist die Verwendung von vorbereiteten Statements nützlicher.
public user getUserByusernAmandPassword (String -Benutzer, String -Pass) {Connector Connector = New Connector (); Connection Connection = Connector.getConnection (); try {preparedStatement ps = connection.preparestatement ("SELECT * Vom Benutzer, wo user =? und pass =?"); Ps.SetString (1, Benutzer); Ps.SetString (2, Pass); ResultSet rs = ps.executeQuery (); if (rs.Next ()) {return extractUserFromResultSet (Rs); }} catch (SQLEXception ex) {ex.printstacktrace (); } return null;}So fragen Sie alle Benutzer
Diese Methode gibt alle Benutzer zurück, daher sollten wir sie in einem Array-ähnlichen Container zurückgeben. Aber weil wir nicht wissen, wie viele Datensätze es gibt. Es wäre besser, eine Sammlung wie Set oder Liste zu verwenden:
public set getAllusers () {Connector Connector = New Connector (); Connection Connection = Connector.getConnection (); try {Anweisung STMT = Connection.CreateStatement (); ResultSet rs = stmt.executeQuery ("aus dem Benutzer auswählen"); Setze user = new Hashset (); while (rs.Next ()) {user user = extractUserFromResultSet (RS); users.Add (Benutzer); } Rückgabebenutzer; } catch (sqlexception ex) {ex.printstacktrace (); } return null;}Methode einfügen
Die Einfügenmethode nimmt den Benutzer als Parameter und verwendet das vorbereitete Objekt, um die SQL -Update -Anweisung auszuführen. Die ExecuteUpdate -Methode gibt die Anzahl der betroffenen Zeilen zurück. Wenn wir eine einzelne Zeile hinzufügen, bedeutet dies, dass die Methode 1 zurückgeben sollte. Wenn ja, geben wir ansonsten zurück. Andernfalls geben wir false zurück
public boolean InsertUser (Benutzer Benutzer) {Connector Connector = New Connector (); Connection Connection = Connector.getConnection (); Versuchen Sie {prepectStatement ps = Connection.Parestatement ("In Benutzerwerte einfügen (Null,?,?,?)"); ps.SetString (1, user.getName ()); Ps.SetString (2, user.getPass ()); ps.Setint (3, user.getage ()); int i = ps.executeUpdate (); if (i == 1) {return true; }} catch (SQLEXception ex) {ex.printstacktrace (); } return false;}Aktualisieren Sie die Methode
Die Aktualisierungsmethode ähnelt der Einfügungsmethode. Die einzige Änderung ist die SQL -Anweisung
public boolean updateUser (Benutzer Benutzer) {Connector Connector = New Connector (); Connection Connection = Connector.getConnection (); try {preparedStatement ps = connection.preparestatement ("Benutzer set name =?, pass =? ps.SetString (1, user.getName ()); Ps.SetString (2, user.getPass ()); ps.Setint (3, user.getage ()); ps.Setint (4, user.getId ()); int i = ps.executeUpdate (); if (i == 1) {return true; }} catch (SQLEXception ex) {ex.printstacktrace (); } return false;}Methode löschen
Die zu löschende Methode besteht darin, eine einfache Abfrage zu verwenden wie
Vom Benutzer löschen wobei id = 7
Durch das Senden der Abfrage mit dem ID -Parameter wird dieser Datensatz gelöscht. Wenn er erfolgreich gelöscht wird, wird 1 zurückgegeben
public boolean deleteUser (int id) {Connector Connector = new Connector (); Connection Connection = Connector.getConnection (); try {Anweisung STMT = Connection.CreateStatement (); int i = stmt.executeUpdate ("vom Benutzer löschen wobei id =" + id); if (i == 1) {return true; }} catch (SQLEXception ex) {ex.printstacktrace (); } return false;}Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!