Je me demande si je devrais garder ce que j'ai fait pour moi-même. Ce ne sont que les bases, mais ... Je vous serais reconnaissant de bien vouloir signaler les erreurs ou les points qui devraient être améliorés.
environnement Java 8 MySQL ver 8.0.14
Utilisez la classe PreparedStatement au lieu de Statement. Pour empêcher l'injection SQL.
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 NOMs sont définis individuellement
Puisque mysql 8 donne une erreur de fuseau horaire du pilote, écrivez comme suit*/
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 est?Affiche le numéro et l'emplacement de.
stmt.setString(1, line);
//executeQuery renvoie un type ResultSet. Méthode de recherche
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();
}
}
}
ʻUtilisez la méthode executeUpdate () `. La valeur de retour est de type int. Renvoie le numéro mis à jour.
//réduction
int i = ps.executeUpdate();
System.out.println("Nombre de mises à jour:" + i);
~~ Pour obtenir ou déconnecter une instruction ou une connexion, créez une classe Util ou quelque chose et décrivez-la comme une méthode statique. Utilisé dans la classe principale. ~~
=> Il n'y a pas de problème s'il s'agit d'un environnement autonome utilisé par une seule personne, mais lorsque vous travaillez côté serveur, utilisez un pool de connexions pour supprimer la génération massive de connexions. (Essayez d'établir une connexion à chaque fois, même dans un environnement autonome.)
nkojima
Merci pour votre commentaire!
DbUtil.java
import java.sql.*;
public class DbUtil {
Définir 8 avec une chaîne finale statique privée
"Valeur du nom d'hôte ou adresse IP du serveur local";
"nom de la base de données";
"Nom d'utilisateur";
"password";
"mysql"; //DB à utiliser
"com." + DBMS + ".cj.jdbc.Driver"; //chauffeur
"numéro de port";
"jdbc:" + DBMS + "://" + DB_HOST + ":" + DB_PORT + "/" + DB_NAME + "?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC"; //URL de la base de données
//Interdiction d'instanciation
private DbUtil() {
}
//Faire de Connection une instance unique
//S'il est acquis à partir de plusieurs applications, utilisez le pool de connexions.
private static Connection con;
//Obtenez une connexion
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;
}
//Déclaration de déconnexion
public static void closeStatement(PreparedStatement stmt) throws SQLException {
if (stmt != null) {
stmt.close();
}
}
//Déconnecter
public static void closeConnection(Connection con) throws SQLException {
if (con != null) {
con.close();
}
}
}
Pour la classe ** DAO **
--Constructor (Spécifiez la connexion à la base de données comme argument lors de la création d'une instance DAO)
public EmployeeDAO(Connection con) {
this.con = con;
}
SELECT
, ʻINSERT, ʻUPDATE
, DELETE
qui renvoient une liste de types DTOpublic List<EmployeeDTO> selectAll() throws SQLException, ClassNotFoundException {
/*Déclarer et initialiser la liste pour le retour*/
/*instruction SQL*/
try {
/*Exécuter l'instruction SQL et stocker dans la liste*/
} finally {
/*déclaration de clôture*/
}
return rtnList;
}
public List<EmployeeDTO> empInsert(Arguments pour les données que vous souhaitez insérer)jette des exceptions{
//Autres méthodes (mise à jour et suppression)
Pour la classe ** DTO **
--Définissez les colonnes de la table DB en tant que champs.
public class EmployeeDTO {
/**ID d'employé*/
private int idEmployee;
/**Nom de l'employé*/
private String nmEmployee;
/**Nom de l'employé Kana*/
private String knEmployee;
/**adresse mail*/
private String mailAddress;
/**mot de passe*/
private String password;
/**ID de position*/
private int idDepartment;
--Créez chaque getter et setter selon vos besoins.
/*Un cas*/
public int getIdEmployee() {
return idEmployee;
}
public void setIdEmployee(int idEmployee) {
this.idEmployee = idEmployee;
}
Recommended Posts