Puisqu'il était difficile d'implémenter JDBC (Java Database Connectivity) qui connecte Java et SQL, je le laisserai en mémoire.
・ OS Windows10 ·éditeur Ecripse ・ Java OpenJDK 8 ・ SQL MySQL
JDBC (Java Database Connectivity) est une API pour connecter Java et RD et fonctionner à partir de Java. Vous pouvez utiliser le concept de JDBC pour enregistrer, mettre à jour et supprimer des données de Java vers SQL et pour récupérer des données de SQL. Il existe différents types de bases de données comme Oracle, MySQL, SQL Server, etc., et la méthode de connexion à chaque base de données dépend du type de base de données. Cela changera, mais si vous vous connectez à une base de données via JDBC, vous pourrez y accéder sans vous soucier de l'individualité de chaque base de données.
Il y avait un article facile à comprendre comme l'histoire de JDBC, donc je vais le poster. https://data.wingarc.com/what-is-api-16084
Pour l'implémentation, suivez la procédure ci-dessous pour implémenter JDBC. ① Chargement du pilote JDBC ② Etablir une connexion avec SQL ③ Envoyer une instruction SQL ④ Acquisition du résultat de l'exécution ⑤ Déconnecter
2-① ① Chargement du pilote JDBC
Chargez le pilote (créez un objet Class en mémoire) à l'aide de la méthode Class.forName. -Une méthode pour charger les fichiers de code d'octet Java (l'extension est un fichier de classe). -Spécifiez une chaîne de caractères (nom du package, nom de la classe) qui représente la classe comme argument. -Si le chargement échoue, une exception ClassNotFoundException se produira, donc Il est nécessaire d'essayer ~ catch lors de son utilisation. Déclarez d'abord la variable dans le champ pour pouvoir l'utiliser ultérieurement comme variable.
MessageDao.java
public class MessageDao {
//Déclarer les variables nécessaires à la connexion
private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
private static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
private static final String USER_ID = "imuser";
private static final String USER_PASS = "impass";
MessageDao (){
//Chargement du pilote JDBC
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Si vous l'exécutez dans cet état, vous obtiendrez une erreur java.lang.ClassNotFonudException. Pour accéder à la base de données à partir de l'application Java Tout d'abord, vous devez obtenir le pilote JDBC spécifique au SGBDR fourni par le fournisseur. De plus, il est nécessaire de définir des paramètres pour que le pilote JDBC obtenu puisse être utilisé à partir de programmes Java. Le pilote JDBC peut être téléchargé à partir du site Web d'Oracle. https://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.htm
Une fois le téléchargement terminé, il existe un fichier appelé "ojdbc8.jar", qui est le pilote JDBC. Placez "ojdbc8.jar" autour de C:.
Pour rendre le pilote JDBC disponible pour les programmes Java, il doit être ajouté au chemin de construction, suivez donc les étapes ci-dessous.
Si vous appuyez sur Exécuter et qu'aucune exception ne se produit, le pilote JDBC a été chargé avec succès.
2-② ② Etablir une connexion avec SQL
Créez une méthode getConnection () dans la classe DriverManager pour établir une connexion à la base de données. Mettez à jour l'URL de connexion, le nom d'utilisateur et le mot de passe DB pour qu'ils pointent vers la base de données.
MessageDao.java
public class MessageDao {
//Déclarer les variables nécessaires à la connexion
private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
private static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
private static final String USER_ID = "imuser";
private static final String USER_PASS = "impass";
MessageDao (){
//Chargement du pilote JDBC
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public ArrayList<MessageDto> select() {
ArrayList<MessageDto> list = new ArrayList<>();
//Déclaration de classe de connexion
Connection con = null;
//Déclaration de classe de déclaration
PreparedStatement ps = null;
//Déclaration de la classe d'ensemble de résultats
ResultSet rs = null;
//Accéder à la base de données
try {
//Établissez une connexion avec la base de données.
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
}
}
}
Qu'est-ce que la classe DriverManager? -Classe de gestionnaire de pilotes JDBC. Diverses fonctions pour accéder au pilote JDBC et utiliser le SGBDR sont fournies. Si la méthode getConnection se connecte au SGBDR et que la connexion réussit, un objet Connection avec des informations sur la connexion DB est renvoyé comme valeur de retour. La connexion est exécutée en spécifiant les informations de connexion au DB (DB de destination de connexion, ID utilisateur, mot de passe) dans l'argument.
Une boîte qui sera utilisée plus tard pour stocker les résultats extraits de SQL,
ArrayList
Comme nous avons besoin d'un DTO pour définir les données, créez une classe MessageDto.java afin que les données puissent être définies. 2-③ ③ Envoyer une instruction SQL Demandez à RDB d'exécuter l'instruction SQL avec la méthode executeQuery ou la méthode executeUpdate de l'objet de type Statement.
MessageDao.java
public class MessageDao {
//Déclarer les variables nécessaires à la connexion
private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
private static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
private static final String USER_ID = "imuser";
private static final String USER_PASS = "impass";
MessageDao (){
//Chargement du pilote JDBC
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public int insert(MessageDto dto) {
//Déclaration de classe de connexion
Connection con = null;
//Déclaration de classe de déclaration
PreparedStatement ps = null;
//Variable de traitement du résultat (nombre de cas)
int result = 0;
//Accéder à la base de données
try {
//Établissez une connexion avec la base de données.
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
//Génération d'instructions SQL (instruction SELECT)
StringBuilder builder = new StringBuilder();
//Instruction SQL SELECT*Obtenez tous les cas avec
builder.append("SELECT *");
builder.append("FROM ");
builder.append(" MESSAGE_BOARD ");
builder.append("ORDER BY ");
builder.append(" ID DESC ");
//Stocker l'instruction SQL dans la classe d'instructions
ps = con.prepareStatement(builder.toString());
}
}
}
Le générateur de type StringBuilder est déclaré en tant que variable car la méthode append joint les chaînes. Vous pouvez également combiner des chaînes avec l'opérateur "+", mais comme la vitesse de traitement du programme sera plus rapide si vous utilisez la méthode append de StringBuilder, vous déclarez une variable de type StringBuilder et les combinez à l'aide de la méthode append. Je vais.
2-④ ④ Acquisition du résultat de l'exécution
Obtient les données du résultat de l'extraction de l'instruction SELECT envoyée à l'aide de l'objet ResultSet.
MessageDao.java
public class MessageDao {
//Déclarer les variables nécessaires à la connexion
private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
private static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
private static final String USER_ID = "imuser";
private static final String USER_PASS = "impass";
MessageDao (){
//Chargement du pilote JDBC
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public int insert(MessageDto dto) {
//Déclaration de classe de connexion
Connection con = null;
//Déclaration de classe de déclaration
PreparedStatement ps = null;
//Variable de traitement du résultat (nombre de cas)
int result = 0;
//Accéder à la base de données
try {
//Établissez une connexion avec la base de données.
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
//Génération d'instructions SQL (instruction SELECT)
StringBuilder builder = new StringBuilder();
//Instruction SQL SELECT*Obtenez tous les cas avec
builder.append("SELECT *");
builder.append("FROM ");
builder.append(" MESSAGE_BOARD ");
builder.append("ORDER BY ");
builder.append(" ID DESC ");
//Stocker l'instruction SQL dans la classe d'instructions
ps = con.prepareStatement(builder.toString());
//Exécuter SQL et stocker le résultat de l'acquisition dans le jeu de résultats (rs)
rs = ps.executeQuery();
while (rs.next()) {
//Instanciez Dto pour stocker les résultats d'acquisition
MessageDto dto = new MessageDto();
//Stocker le résultat de l'acquisition dans dto
dto.setId (rs.getInt("id"));
dto.setName (rs.getString("name"));
dto.setMessage (rs.getString("message"));
dto.setCreatedAt(rs.getTimestamp("created_at"));
//Remplissez la liste avec les données d'un enregistrement stocké dans Dto
list.add(dto);
}
}
}
}
L'objet ResultSet est reçu comme valeur de retour de la méthode executeQuery de la classe Statement. C'est un objet qui peut être utilisé et les données du résultat de l'extraction de l'instruction SELECT envoyée sont stockées dans rs. Le résultat d'exécution reçu de SQL peut être mis en boucle et extrait un enregistrement à la fois. Une fois le réglage terminé, ajoutez la valeur définie dans la liste vide générée précédemment.
2-⑤ ⑤ Déconnecter
Puisqu'il est nécessaire de se déconnecter explicitement lorsque l'accès à la base de données est terminé, utilisez la méthode close pour chacun des objets Connection, Statement et ResultSet pour déconnecter (fermer).
MessageDao.java
public ArrayList<MessageDto> select() {
ArrayList<MessageDto> list = new ArrayList<>();
//Déclaration de classe de connexion
Connection con = null;
//Déclaration de classe de déclaration
PreparedStatement ps = null;
//Déclaration de la classe d'ensemble de résultats
ResultSet rs = null;
//Accéder à la base de données
try {
//Connectez-vous à la base de données
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
StringBuilder builder = new StringBuilder();
builder.append("SELECT ");
builder.append(" id ");
builder.append(" ,name ");
builder.append(" ,message ");
builder.append(" ,created_at ");
builder.append("FROM ");
builder.append(" message_board ");
builder.append("ORDER BY ");
builder.append(" ID DESC ");
//Stocker l'instruction SQL dans la classe d'instructions
ps = con.prepareStatement(builder.toString());
//Exécuter SQL et stocker le résultat de l'acquisition dans le jeu de résultats
rs = ps.executeQuery();
//Extraire les données un enregistrement à la fois de l'ensemble de résultats
while (rs.next()) {
//Instanciez Dto pour stocker les résultats d'acquisition
MessageDto dto = new MessageDto();
//Stocker le résultat de l'acquisition dans Dto
dto.setId (rs.getInt("id"));
dto.setName (rs.getString("name"));
dto.setMessage (rs.getString("message"));
dto.setCreatedAt(rs.getTimestamp("created_at"));
//Remplissez la liste avec les données d'un enregistrement stocké dans Dto
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//Renvoyer le résultat de l'acquisition à l'appelant
return list;
}
Ceci termine l'implémentation de JDBC. L'ajout, la mise à jour et la suppression de SQL modifient un peu la façon d'écrire les connexions, je vais donc résumer à ce sujet et le modèle JDBC. J'espère que cela aidera ceux qui implémenteront JDBC à l'avenir.
・ Https://docs.oracle.com/cd/E96517_01/tdpjd/creating-java-bean-implementation-jdbc-connection.html ・ Https://data.wingarc.com/what-is-api-16084
Recommended Posts