1. Expliquez d'abord ce qu'est JDBC
Avant de voir ce nom à première vue, je sentais qu'il était nécessaire de savoir quel était son nom anglais complet. Connectivité de la base de données Java, qui est littéralement traduite dans une base de données Java connectée. Pour le dire franchement, je souhaite fournir un ensemble de liens intermédiaires pour connecter le code Java et la base de données afin qu'il puisse contrôler directement la base de données en fonctionnant le code Java.
2. L'essence de JDBC
Il s'agit d'une solution Java pour accéder aux bases de données. Il espère accéder à différentes bases de données de la même manière pour réaliser une interface d'opération Java qui n'est pas liée à la base de données spécifique.
JDBC est essentiellement un ensemble d'interfaces standardisées. Différents fabricants de bases de données implémentent cette interface en fonction de leurs propres caractéristiques de base de données, et nous n'avons pas besoin de nous soucier des méthodes spécifiques de mise en œuvre.
Les principales interfaces implémentées par les fabricants de bases de données dans JDBC sont les suivantes:
Drivermanager: Gestion des conducteurs
Connexion,
DatabaseMetadata: Connectez-vous à l'interface
Déclaration,
Étarée de préparation
CallableStatement: interface d'objet de déclaration
ResultSet,
ResultSetMetadata: Interface de résultat
3. Comment fonctionne JDBC
Le programmeur appelle la pièce implémentée par le fabricant de bases de données sous-jacente.
C'est-à-dire: 1) implémenter la première étape de connexion via l'interface de connexion
2) Transférer les instructions SQL via les résultats de l'instruction
3) Le processus principal de l'enregistrement des résultats de retour de la base de données à l'interface de jeu de résultats de résultat peut être résumé comme:
1) Chargez le pilote et créez la connexion
2) Créer un objet instruction
3) Exécuter des instructions SQL
4) Renvoyer l'ensemble de résultats
5) Fermez la connexion
Ci-dessous, je prendrai la base de données Oracle que j'ai apprise et coopérez avec ECLIPS comme exemple pour expliquer comment implémenter JDBC
1) Chargement du conducteur
La méthode utilisée est: class.forname ("Driver");
Ce que je sais sur la façon d'obtenir ce pilote, c'est: développer le package JDBC JAR, si j'utilise ojdbc6.jar, trouver oracle.jdbc.driver, trouver Oracledriver, puis cliquez avec le bouton droit sur QualityCopy, et collez-le en guillemets, tels que: class.forname ("oracle.jdbc.driver.oracedriver");
2) Créer une connexion
La méthode utilisée est: Conn = driverManager.getConnection ("jdbc: oracle: mince: @ip adresse: 1521: orcl", "compte de base de données", "mot de passe de la base de données");
Par exemple: Conn = driverManager.getConnection ("JDBC: Oracle: mince: @ 172.16.3.8: 1521: ORCL", "JSD1601", "JSD1601");
3) Créer un objet de déclaration
La méthode utilisée est: instruction stmt = conn.creatEstatement ();
Il convient de noter que la connexion créée dans la deuxième étape est utilisée pour appeler la méthode
Appelez la méthode ExecuteUpdate et passez l'instruction SQL pour exécuter l'instruction SQL écrite. Il convient de noter ici que les types de SQL que la méthode ExecuteUpdate peut exécuter sont insérés, mis à jour, supprimer
Par exemple: instruction stmt = conn.creatEstatement ();
String sql = "Insérer dans emp_jiawenzhe (empno, ename, sal, deptno) valeurs (1000, 'jia wenzhe', 1500,10)";
int i = stmt.ExecuteUpdate (SQL);
La valeur de retour I ici est le nombre de lignes affectées. Nous pouvons juger si l'opération réussit en fonction du nombre de lignes affectées.
4) L'ensemble de résultats retourné se réfère principalement à l'opération de sélection (non mentionné ici)
5) Fermez enfin la connexion
Par exemple: conn.close ();
Énumérez un code entier, y compris les commentaires:
Package JDBC_DAY01; Importer Java.Sql. *; / ** * Démontrer les étapes de fonctionnement de JDBC * 1. Chargez le pilote * 2. Créez la connexion * 3. Créer un objet de déclaration * 4. Envoyer la connexion * @Author Jiawenzhe * / CLASSE PUBLIQUE JDBCDOME) args) lève SQException {// Exigences: créer un employé, numéro d'employé, nom de l'employé, salaire, numéro de département // 1, connexion conn = null; essayez {class.forname ("oracle.jdbc.driver.oracledriver"); System.out.println ("Chargement du pilote Succès avec succès"); // 2. Conn = driverManager.getConnection ("JDBC: Oracle: mince: @ 172.16.3.8: 1521: ORCL", "JSD1601", "JSD1601"); System.out.println (conn.getClass (). GetName ()); // 3. // Objet de l'instruction de statistique. Envoyer et exécuter SQL Instruction / * * int snepupDate (String SQL); * Envoyer un insert, mise à jour, supprimer l'instruction * RETOUR-valeur INT représente le nombre de lignes affectant la table de base de données * / instruction stmt = conn.creataTation (); String sql = "Insérer dans emp_jiawenzhe (empno, ename, sal, deptno)" + "valeurs (1000, 'wang xiaoer', 1500,10)"; int i = stmt.ExecuteUpdate (SQL); if (i> 0) {System.out.println ("Enregistrer avec succès!"); }} catch (classNotFoundException e) {e.printStackTrace (); // 1. Enregistrez le journal // 2. Informer l'appelant pour lancer un nouveau RuntimeException ("Erreur de chargement de chargement", e); } Enfin {// Fermez la connexion if (conn! = null) {try {conn.close (); } catch (sqlexception e) {e.printStackTrace (); }}}}}}} Remarque: le package JAR qui peut être utilisé dans la base de données Oracle: OJDBC14.JAR / OJDBC6.JAR (Oracle12C utilise ceci)
Le package JAR qui peut être utilisé par MySQL Database: MySQL-Connector-Java-5.0.4-Bin.jar
Classe du pilote de chargement:
Class.forname ("com.mysql.jdbc.driver"); 1. Introduction de la méthode d'emballage
Ce qui m'a le plus touché, c'est que lorsque j'écris une certaine série de codes, s'il y a une réutilisation de code, je choisirai certainement une méthode pour encapsuler le code dans une certaine mesure, de résumer une méthode pour encapsuler une classe. L'utilisation mentionnée précédemment de JDBC pour les opérations de base de données (addition, suppression et modification, car la requête implique le fonctionnement de l'ensemble de résultats et déclaré séparément) est divisé en quatre processus:
1) Chargement du conducteur
2) Créer une connexion
3) Créer un objet instruction et envoyer SQL
4) Fermez la connexion
En d'autres termes, lorsque nous effectuons une opération de base de données, nous devons effectuer les étapes ci-dessus, ce qui conduit à la redondance du code. Nous avons donc proposé d'encapsuler ces étapes courantes dans une classe afin qu'elle puisse devenir une classe d'outils pour mon utilisation.
2. Trois versions de l'encapsulation
Version 1
Lorsque j'apprenais, je résume progressivement ces classes de manière progressive et je les ai améliorées progressivement, car si la version ultime de l'encapsulation est directement proposée, il est difficile pour les débutants d'accepter. Je vais expliquer la première, c'est-à-dire la méthode la plus simple de l'encapsulation:
Vous découvrirez plus tôt que peu importe comment vous souhaitez utiliser la base de données, le chargement du pilote est essentiel, et le pilote de chargement comprend principalement des déclarations, le nom du pilote, l'adresse IP, le numéro de port, le nom du compte de base de données, le mot de passe, etc., et l'essence de ces chaînes est donc, donc je définis ces chaînes séparément, comme indiqué ci-dessous:
Private Static String DriverClass = "oracle.jdbc.driver.oracledriver"; Url de chaîne statique privée = "JDBC: Oracle: Thin: LOSTHOST: 1521: ORCL"; String statique privé user = "System"; Private static String Password = "123";
De cette façon, lors de la création de la connexion, je peux directement obtenir le nom de la variable pour remplacer la chaîne longue. Lors du chargement du pilote, la Class de méthode.
Comme indiqué ci-dessous:
statique {try {class.forname (DriverClass); } catch (classNotFoundException e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de chargement de chargement", e); }}Pour créer une connexion, nous appelons la méthode GetConnection de DriverManager et y mettons le nom d'utilisateur et le mot de passe correspondant. Nous mettons cette méthode directement dans la méthode que j'ai définie, puis appelons directement ma méthode pour créer la connexion. Il convient de noter que la valeur de retour de la méthode est l'objet de connexion, qui est facile à comprendre, car nous voulons obtenir cet objet de type de connexion, comme indiqué ci-dessous:
Connexion statique publique getConnection () lève SQException {Connection Conn = driverManager.getConnection (URL, utilisateur, mot de passe); Retourne Conn; }Créez ensuite un objet d'instruction et envoyez SQL. Bien sûr, SQL est le seul endroit spécial ici, car ce que SQL doit faire est très différent, cette étape n'a donc pas besoin d'être encapsulée.
Enfin, fermez la connexion, qui est appelée la méthode close (), comme indiqué ci-dessous
public static void close (connexion conn) {if (conn! = null) {try {conn.close (); } catch (sqlexception e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de connexion à clôture", E); }}}}La première version globale du package est la suivante:
Package JBBC_DAY01; Importer Java.Sql.Connection; Importer Java.Sql.DiverManager; Importer Java.Sql.Sqlexception; / ** * Utilisé pour gérer les connexions * @author jiawenzhe * * / public class dbutil {private static string lightclass = "Oracle.jdbc.Drivert.oracledRiver"; Url de chaîne statique privée = "JDBC: Oracle: Thin: LOSTHOST: 1521: ORCL"; String statique privé user = "System"; Private static String Password = "123"; // 1. Chargement du pilote statique {try {class.forname (DriverClass); } catch (classNotFoundException e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de chargement du pilote", E); }}} // 2. Créer une connexion / * * Comment définir une méthode qui peut créer une connexion * Type de valeur de retour: s'il y a un résultat d'opération, s'il existe, le type du résultat est le type de valeur de retour * Liste des paramètres: * s'il existe des données incertaines dans la fonction de méthode participe à l'opération, s'il existe, une connexion Conne = DiverMermanAgère. Retourne Conn; } // 3. Fermez la connexion publique static void close (connexion conn) {if (conn! = Null) {try {conn.close (); } catch (sqlexception e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de connexion à clôture", E); }}}}}Encapsulez simplement de cette façon, puis appelez directement la classe d'encapsulation lors de l'exécution des opérations SQL. Tout ce dont vous avez besoin pour écrire est de créer votre objet de déclaration et d'envoyer votre instruction SQL
Version 2
En fait, la version 2 est très similaire à la version 1, afin de compenser l'une des lacunes de la version 1, c'est-à-dire lorsque vous modifiez la base de données, les mots de passe du compte des différentes bases de données sont différents, vous devez donc modifier le mot de passe du compte et l'adresse IP. Je les ai précédemment encapsulés dans la classe d'outils sous la forme d'une chaîne, ce qui signifie que nous devons modifier la classe d'outils chaque fois que nous modifions la base de données, ce qui est très inapproprié. Nous avons donc proposé une méthode d'amélioration pour mettre ces données de connexion dans un fichier de configuration, et la classe d'outils lit ce fichier de configuration. Nous pouvons modifier directement le fichier de configuration lors de la modification.
Avant d'introduire cette version, j'ai introduit une nouvelle classe, Properties, qui est un fichier qui peut lire et lire le contenu du fichier de configuration sous la forme d'un flux, puis le renvoyer dans la classe d'outils.
Tout d'abord, je donnerai un exemple du fichier de configuration. En fait, il n'a pas besoin d'être expliqué. Il est clair en un coup d'œil, comme indiqué ci-dessous:
jdbc.DriverClass = oracle.jdbc.driver.oracledriverjdbc.url = jdbc: oracle: mince: localhost: orcljdbc.user = systemjdbc.password = 123
Le front est la clé, ce qui suit est la valeur, et la valeur de clé précédente est définie par nous-mêmes, tout comme la définition du nom de la variable, la valeur suivante est la situation réelle de notre base de données. Ce que nous devons prêter une attention particulière ici, c'est que le nom de suffixe de ce fichier de configuration doit se terminer par .properties, car de cette manière, la classe de propriétés peut être lue.
Des exemples de cette section sont les suivants:
static {try {// charger les propriétés de données de fichiers de propriété pop = new Properties (); pop.load (dbutil2.class.getClassloadher (). getResourCeasStream ("db.properties")); url = pop.getProperty ("jdbc.url"); DriverClass = pop.getProperty ("jdbc.DriverClass"); user = pop.getProperty ("jdbc.user"); mot de passe = pop.getProperty ("jdbc.password"); Class.forname (DriverClass); } catch (classNotFoundException e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de chargement de chargement", e); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }}La méthode de chargement () est de la lire ou elle peut être considérée comme chargée du fichier de configuration. N'oubliez pas toute cette phrase sans plonger dans sa signification. GetProperty () obtient la valeur correspondante via la clé, qui est très similaire à la forme d'obtention d'une valeur pour l'ensemble de paires de valeurs de clé.
Le code global est le suivant:
Package JBBC_DAY01; Importer java.io.fileInputStream; Importer java.io.ioException; import java.io.inputStream; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; Importer Java.util.properties; Informations, enregistrées dans le fichier de propriétés * @author jiawenzhe * * / classe publique dButil2 {Private Static String DriverClass; URL de chaîne statique privée; Utilisateur de chaîne statique privée; Mot de passe de chaîne statique privé; // 1. Charge Driver static {try {// Charge Property File Data Properties pop = new Properties (); pop.load (dbutil2.class.getClassloadher (). getResourCeasStream ("db.properties")); url = pop.getProperty ("jdbc.url"); DriverClass = pop.getProperty ("jdbc.DriverClass"); user = pop.getProperty ("jdbc.user"); mot de passe = pop.getProperty ("jdbc.password"); Class.forname (DriverClass); } catch (classNotFoundException e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de chargement de chargement", e); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }} // 2. Créer une connexion / * * Comment définir une méthode qui peut créer une connexion * Type de valeur de retour: s'il y a un résultat d'opération, s'il existe, le type du résultat est le type de valeur de retour * Liste des paramètres: * s'il existe des données incertaines dans la fonction de méthode participe à l'opération, s'il existe, une connexion Conne = DiverMermanAgère. Retourne Conn; } // 3. Fermez la connexion publique static void close (connexion conn) {if (conn! = Null) {try {conn.close (); } catch (sqlexception e) {e.printStackTrace (); lancer un nouveau RuntimeException ("Erreur de connexion à clôture", E); }}}}}