Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base

Comment se connecter à une base de données avec Java?

Dans le code Java, la méthode qui apparaît souvent comme une méthode de base à utiliser sans dépendre de bibliothèques externes est d'utiliser un système appelé JDBC. Ceci est préparé comme un standard Java, et lors de la connexion à une base de données réelle, une bibliothèque appelée connecteur est également utilisée.

Bien qu'il soit utilisé ensemble, le code lui-même requis pour la connexion peut essentiellement être écrit dans le cadre de JDBC, donc si vous préparez plusieurs connecteurs, vous pouvez changer de système de base de données relativement facilement.

Tout d'abord, écrivons le code lors de l'utilisation de Derby fourni en standard avec le Java Development Kit (JDK). Ici, nous utiliserons Derby, qui est livré en standard avec le JDK. Assurez-vous d'ajouter la bibliothèque Derby à votre projet. Veuillez également utiliser "Mettons ensemble Derby dans la bibliothèque utilisateur" comme matériel de référence.

Code de base

Maintenant, récupérons le code de base. Pour le moment, laissez l'environnement de développement sous Eclipse. Créons un projet approprié et utilisons Sample1 comme classe.

/**
 *Exemple de connexion à la base de données(Partie 1:Méthode de déclaration)
 * 
 * @author Sato Daisuke
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Sample1 {
    public static void main(String[] args) throws SQLException {
        // (1)Préparer un URI pour la connexion(Utilisateur d'instructions d'authentification si nécessaire/Ajouter un mot de passe)
        String uri = "jdbc:derby:memory:sample;create=true";

        // (2)Connectez-vous avec une méthode de la classe DriverManager
        Connection conn = DriverManager.getConnection(uri);

        // (3)Créer une instance pour l'envoi de SQL
        Statement st = conn.createStatement();

        // (4)Transmission SQL
        st.executeUpdate("create table sample(id integer primary key)");
        Long start = System.currentTimeMillis();
        Long delta = start;

        //Pour le moment, 10000 boucles
        for (int i = 0; i < 10000; i++) {
            st.executeUpdate("insert into sample values(" + i + ")");

            //Calcul de fractionnement
            if (i % 1000 == 0) {
                Long now = System.currentTimeMillis();
                Long split = now - delta;
                System.out.println("" + i + ": " + split + "ms.");
                delta = now;
            }
        }
        Long end = System.currentTimeMillis();
        System.out.println("Temps requis: " + (end - start) + "ms.");

        // (5)Nettoyer(Clôture réussie de l'instance)
        st.close();
        conn.close();
    }
}

Expliquons-le en quelques mots.

Préparation de la chaîne de connexion

JDBC rend plus difficile la dépendance à une base de données spécifique, mais vous ne pouvez pas vous connecter à moins de savoir à quel système de base de données vous connecter. Par conséquent, une chaîne de caractères pour la connexion (ici, cela s'appelle une "chaîne de caractères de connexion") est préparée, et la méthode de connexion est acquise par le symbole correspondant au connecteur.

        // (1)Préparer un URI pour la connexion(Utilisateur d'instructions d'authentification si nécessaire/Ajouter un mot de passe)
        String uri = "jdbc:derby:memory:sample;create=true";
  1. La partie jdbc: est fixe car c'est une chaîne de caractères indiquant qu'il s'agit de JDBC.
  2. La partie derby sera le nom du connecteur.Lorsque le connecteur est reconnu par JDBC, le" nom "de chacun sera enregistré, vous devrez donc le comparer pour sélectionner le connecteur auquel vous connecter.
  3. La partie suivante (dans le code ci-dessus, après «memory») est un code qui dépend du connecteur.

Dans le cas de Derby, s'il s'agit d'un type de bibliothèque conscient de l'utilisation intégrée, il peut être écrit sous cette forme. Par contre, dans le cas de type client / serveur (C / S), il sera écrit comme une URL. Par exemple, jdbc: derby: // hogeserver / fuga. Dans les deux cas, une base de données mémoire est disponible, et en entrant le mot-clé memory, un DB temporaire est créé sur la mémoire au lieu de sur le stockage. Dans ce cas, il disparaît lorsque le système avec DB est terminé (arrêt du programme si type intégré, arrêt du serveur si C / S, etc.).

Dans le cas de MySQL, il s'agit essentiellement de C / S, donc il sera au format jdbc: mysql: // hogeserver / fuga.

Obtenir l'état de la connexion

Après avoir décidé de la chaîne de connexion, connectez-vous. Cependant, il est difficile d'écrire la connexion complètement du côté de l'utilisateur, il y a donc une existence pour laquelle il faut agir, c'est la classe DriverManager. Laissons ce gars connecté. Utilisez la méthode statique getConnection () pour obtenir le comportement de ** get ** Connection **.

// (2)Connectez-vous avec une méthode de la classe DriverManager
Connection conn = DriverManager.getConnection(uri);

Comme le nom de la méthode l'indique, l'instance générée est une classe Connection, donc attrapez-la avec une variable de cette classe.

Notez que cette méthode crée un envoi lorsque la connexion échoue. En guise de contre-mesure, déléguez-le au parent avec la déclaration throws, ou traitez-le avec try ~ catch. L'exemple de code est écrit dans «throws».

Création d'une instruction pour l'envoi de SQL

Une fois que vous avez une connexion, vous allez créer quelque chose appelé une ** instruction ** pour remplir cette connexion avec SQL.

// (3)Créer une instance pour l'envoi de SQL
Statement st = conn.createStatement();

Pour l'instance connectée (ici, elle est reçue par la variable conn), cela ressemble à" Vous envoyer du SQL et préparer une fenêtre ". C'est une instance d'une classe appelée «Statement». Cette instance peut être utilisée à plusieurs reprises, donc une fois que vous l'avez créée, vous l'aurez probablement pour le moment.

Envoyer SQL

Si vous pouvez obtenir l'instruction, vous pouvez transmettre l'instruction SQL ici et la faire évaluer. La méthode système ʻexecute` est actuellement utilisée, mais il en existe trois types. Vous devez le choisir de manière appropriée.

ʻExecute Update (instruction SQL) `

Il est utilisé pour envoyer du SQL de mise à jour, cela s'appelle update, mais à l'extrême, il peut être préférable de dire ** autre que SELECT **. Si cela fonctionne, vous obtiendrez une valeur de retour de ** combien de cas ont été traités ** (valeur entière).

ʻExcute Query (instruction SQL)

Utilisé pour envoyer du SQL pour obtenir les résultats sous la forme d'une table. Il s'agit d'une instruction SELECT émoussée. Si cela fonctionne, vous pouvez obtenir la table. Cette table est une instance d'une classe appelée «ResultSet», mais c'est une autre affaire.

ʻExecute (instruction SQL) `

Dans les deux méthodes ci-dessus, il était nécessaire de considérer le type de SQL et de les utiliser correctement, mais c'est celui utilisé par une personne nommée ** Un tel problème **. Cela semble facile à utiliser, mais ce ne sera probablement pas extrêmement facile car vous devez exercer une autre méthode d'acquisition de résultats en fonction du type de requête (qu'il s'agisse d'un système de mise à jour ou non).

Utilisation réelle

Puisque le système de mise à jour est utilisé ici, ʻexecuteUpdate () `est utilisé.

// (4)Transmission SQL
st.executeUpdate("create table sample(id integer primary key)");
...(Omission)...
st.executeUpdate("insert into sample values(" + i + ")");

L'ancien code envoie une requête pour créer une table. La valeur de retour (valeur numérique) est zéro car il n'y a en fait aucun changement sur la table. Dans ce dernier cas, nous insérons des valeurs dans la table, mais nous créons et envoyons des chaînes à la volée. Les mérites et les inconvénients de cette loi seront traités ailleurs.

Cessation d'utilisation, libération

En fin d'utilisation, il est préférable de le fermer selon la bonne procédure. Il peut y avoir des omissions de traitement, nous essayons donc de les gérer correctement et de terminer avec la bonne procédure.

// (5)Nettoyer(Clôture réussie de l'instance)
st.close();
conn.close();

Dans le cas de Java, il n'y a pas de norme claire selon laquelle l'objet disparaît lorsqu'il quitte le bloc (un état de Schrodinger subtil, qu'il soit vivant ou mort jusqu'à ce qu'il soit ramassé), vous ne pouvez donc pas vous attendre à un destructeur. Assurez-vous d'écrire correctement le processus de résiliation.

Quand je l'exécute

Quand j'essaye d'exécuter ce code, j'obtiens deux cas.

Si exécuté normalement

Si cela fonctionne normalement, la sortie sera comme ça.

0: 38ms.
1000: 1142ms.
2000: 892ms.
3000: 748ms.
4000: 634ms.
5000: 560ms.
6000: 595ms.
7000: 667ms.
8000: 681ms.
9000: 537ms.

Temps requis: 7040ms.

Il est possible de faire des tours toutes les 1000 fois. Bien entendu, cela changera considérablement en fonction de la puissance de la machine.

S'il ne peut pas être exécuté normalement

Si vous omettez les fautes de frappe de code, vous rencontrerez généralement cette erreur une fois.

Exception in thread "main" java.sql.SQLException: No suitable driver found 
                                          for jdbc:derby:memory:sample;create=true
	at java.sql.DriverManager.getConnection(DriverManager.java:689)
	at java.sql.DriverManager.getConnection(DriverManager.java:270)
	at dbsample1.Sample1.main(Sample1.java:20)

L'erreur est "Aucun pilote approprié trouvé". Un pilote est un connecteur. Étant donné que la lecture du connecteur se fait au moment de l'exécution, il est pratiquement impossible de l'inspecter avant l'exécution. Le connecteur est distribué au format d'archive de classe Java (jar) et le chemin de classe d'exécution doit inclure l'archive.

Lorsque vous le faites dans Eclipse, il est préférable de créer une bibliothèque Derby (bibliothèque utilisateur). Si vous le créez, ajoutez-le à votre chemin de construction et réexécutez-le, cela fonctionnera probablement.

La même chose s'applique lors de l'utilisation de MySQL. Dans ce cas également, il sera plus facile de travailler avec la bibliothèque utilisateur.

Recommended Posts

Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base
Essayez de vous connecter à la base de données autonome avec JDK6 (Java) + pilote JDBC OCI (type 2).
Créer une méthode pour renvoyer le taux de taxe en Java
Java pour apprendre avec les ramen [Partie 1]
Remplacer par une valeur selon la correspondance avec une expression régulière Java
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
[Java] Résumez comment comparer avec la méthode equals
Méthode de concurrence en Java avec exemple de base
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
J'ai essayé de faire une authentification de base avec Java
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
Sortez avec un suffixe sur la méthode
Sortez avec un suffixe sur la méthode 2
Comment utiliser la méthode replace () (Java Silver)
[Java / PostgreSQL] Connectez l'application WEB à la base de données
J'ai essayé de casser le bloc avec java (1)
La voie de la création d'un service Web (partie 1)
Les ingénieurs Java comparés pour apprendre la grammaire de base de Ruby maintenant Partie 1 (Basique, Variables)
Jusqu'à ce que vous exécutiez un programme Java avec le SDK AWS local sur Windows
Les ingénieurs Java comparent maintenant pour apprendre la grammaire de base de Ruby Part 2 (classes, méthodes)
3. Créez une base de données à laquelle accéder à partir du module Web
Soumettre une tâche à AWS Batch avec Java (Eclipse)
[Débutant] Créez un jeu compétitif avec des connaissances de base sur Java
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste
Connexion HTTPS avec Java au serveur de certificats auto-signé
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
[Java] Notes de méthode de base
[Java] Découpez une partie de la chaîne de caractères avec Matcher et des expressions régulières
[Java] Comment rompre une ligne avec StringBuilder
Remplacez seulement une partie de l'hôte URL par java
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Déployez des applications Java développées localement avec Cloud Toolkit sur des instances Alibaba Cloud ECS
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
Comment réduire même un peu la charge du programme lors de la combinaison de caractères avec JAVA
[Rails] Que faire lorsque la vue se réduit lorsqu'un message est affiché avec la méthode des erreurs
Comment obtenir le nom d'une classe / méthode exécutée en Java
Comment faire une capture d'écran avec l'émulateur Android Studio
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
Tutoriel pour créer un blog avec Rails pour les débutants Partie 1
J'ai essayé de moderniser une application Java EE avec OpenShift.
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Je veux faire une liste avec kotlin et java!
Je veux appeler une méthode et compter le nombre
Je veux créer une fonction avec kotlin et java!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Tutoriel pour créer un blog avec Rails pour les débutants Partie 2
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Un mémorandum pour atteindre le lieu qui démange pour Java Gold
Un mémo pour démarrer la programmation Java avec VS Code (version 2020-04)
Assurez-vous de comparer le résultat Java compareTo avec 0
J'ai essayé OCR de traiter un fichier PDF avec Java part2
Tutoriel pour créer un blog avec Rails pour les débutants Partie 0
Modéliser Digimon avec DDD pour la première fois Partie 1
Authentification de base avec Java 11 HttpClient
Java pour jouer avec Function
Sortie sur la méthode Partie 1