Ich frage mich, ob ich das, was ich getan habe, als Memorandum für mich behalten sollte. Es sind nur die Grundlagen, aber ... Ich würde mich freuen, wenn Sie auf Fehler oder Punkte hinweisen könnten, die verbessert werden sollten.
Umgebung Java 8 MySQL ver 8.0.14
Verwenden Sie die PreparedStatement-Klasse anstelle von Statement. Um SQL-Injektion zu verhindern.
package dbAccess;
import java.sql.*;
import java.util.Scanner;
public class DbAccess_pres_select {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
/* DB_HOST:DB_PORT/DB_3 NAMEs werden einzeln eingestellt
Da MySQL 8 einen Treiber-Zeitzonenfehler ausgibt, schreiben Sie wie folgt*/
Connection con = DriverManager.getConnection(
"jdbc:mysql://DB_HOST:DB_PORT/DB_NAME?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC",
"hogeuser",
"Password"
);
String line = new Scanner(System.in).nextLine();
String sql = "SELECT * FROM employee WHERE nm_employee = ?";
PreparedStatement stmt = con.prepareStatement(sql);
//1 ist?Zeigt die Nummer und den Ort von an.
stmt.setString(1, line);
//executeQuery gibt einen ResultSet-Typ zurück. Suchmethode
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name =rs.getString("name");
String kana = rs.getString("kana");
String email = rs.getString("mail");
String pass = rs.getString("password");
int idDep = rs.getInt("id_department");
System.out.println(id + "\t" + name + "\t" + kana +"\t" + email + "\t" + pass + "\t" + idDep);
}
stmt.close();
con.close();
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
Verwenden Sie die Methode executeUpdate (). Der Rückgabewert ist vom Typ int. Gibt die aktualisierte Nummer zurück.
//Kürzung
int i = ps.executeUpdate();
System.out.println("Anzahl der Updates:" + i);
~~ Um eine Anweisung oder Verbindung abzurufen oder zu trennen, erstellen Sie eine Util-Klasse oder etwas anderes und beschreiben Sie sie als statische Methode. Wird in der Hauptklasse verwendet. ~~
=> Es ist kein Problem, wenn es sich um eine eigenständige Umgebung handelt, die nur von einer Person verwendet wird. Wenn Sie jedoch auf der Serverseite arbeiten, verwenden Sie einen Verbindungspool, um die Massengenerierung von Verbindungen zu unterdrücken. (Versuchen Sie jedes Mal, eine Verbindung herzustellen, auch in einer eigenständigen Umgebung.)
nkojima
Danke für deinen Kommentar!
DbUtil.java
import java.sql.*;
public class DbUtil {
Definieren Sie 8 mit einem privaten statischen letzten String
"Wert des Hostnamens oder IP-Adresse des lokalen Servers";
"Name der Datenbank";
"Nutzername";
"password";
"mysql"; //DB zu verwenden
"com." + DBMS + ".cj.jdbc.Driver"; //Treiber
"Port-Nummer";
"jdbc:" + DBMS + "://" + DB_HOST + ":" + DB_PORT + "/" + DB_NAME + "?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC"; //DB URL
//Verbot der Instanziierung
private DbUtil() {
}
//Machen Sie Connection zu einer einzelnen Instanz
//Wenn es von mehreren Anwendungen bezogen wird, verwenden Sie den Verbindungspool.
private static Connection con;
//Stellen Sie eine Verbindung her
public static Connection getConnection() throws ClassNotFoundException, SQLException {
if (con == null || con.isClosed()) {
Class.forName(DB_DRIVER);
con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
}
return con;
}
//Anweisung trennen
public static void closeStatement(PreparedStatement stmt) throws SQLException {
if (stmt != null) {
stmt.close();
}
}
//Trennen
public static void closeConnection(Connection con) throws SQLException {
if (con != null) {
con.close();
}
}
}
Für die ** DAO ** Klasse
--Constructor (Geben Sie beim Erstellen einer DAO-Instanz die DB-Verbindung als Argument an.)
public EmployeeDAO(Connection con) {
this.con = con;
}
--Schreiben Sie die Methoden SELECT
, INSERT
, UPDATE
, DELETE
, die eine Liste von DTO-Typen zurückgeben
public List<EmployeeDTO> selectAll() throws SQLException, ClassNotFoundException {
/*Deklarieren und initialisieren Sie die Liste für die Rückgabe*/
/*SQL-Anweisung*/
try {
/*Führen Sie die SQL-Anweisung aus und speichern Sie sie in List*/
} finally {
/*enge Aussage*/
}
return rtnList;
}
public List<EmployeeDTO> empInsert(Argumente für die Daten, die Sie einfügen möchten)löst Ausnahmen aus{
//Andere Methoden (Aktualisieren und Löschen)
Für die Klasse ** DTO **
public class EmployeeDTO {
/**Mitarbeiter-ID*/
private int idEmployee;
/**Mitarbeitername*/
private String nmEmployee;
/**Mitarbeitername Kana*/
private String knEmployee;
/**Mail Adresse*/
private String mailAddress;
/**Passwort*/
private String password;
/**Positions-ID*/
private int idDepartment;
--Erstellen Sie jeden Getter und Setter nach Bedarf.
/*Ein Fall*/
public int getIdEmployee() {
return idEmployee;
}
public void setIdEmployee(int idEmployee) {
this.idEmployee = idEmployee;
}
Recommended Posts