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.
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.
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";
jdbc:
est fixe car c'est une chaîne de caractères indiquant qu'il s'agit de JDBC.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.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
.
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».
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.
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.
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).
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.
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).
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.
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 j'essaye d'exécuter ce code, j'obtiens deux cas.
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.
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.