In Java-Code besteht die Methode, die häufig als grundlegende Methode zur Verwendung ohne Abhängigkeit von externen Bibliotheken erscheint, darin, ein System namens JDBC zu verwenden. Dies wird als Java-Standard vorbereitet, und beim Herstellen einer Verbindung zu einer tatsächlichen Datenbank wird auch eine Bibliothek verwendet, die als Connector bezeichnet wird.
Obwohl es zusammen verwendet wird, kann der für die Verbindung erforderliche Code grundsätzlich im Rahmen von JDBC geschrieben werden. Wenn Sie also mehrere Konnektoren vorbereiten, können Sie die Datenbanksysteme relativ einfach wechseln.
Schreiben wir zunächst den Code, wenn Sie Derby verwenden, das standardmäßig mit dem Java Development Kit (JDK) geliefert wird. Hier verwenden wir Derby, das standardmäßig mit dem JDK geliefert wird. Stellen Sie sicher, dass Sie die Derby-Bibliothek zu Ihrem Projekt hinzufügen. Bitte verwenden Sie auch "Lassen Sie uns Derby in der Benutzerbibliothek zusammenstellen" als Referenzmaterial.
Lassen Sie uns nun den Basiscode erhalten. Verlassen Sie die Entwicklungsumgebung vorerst als Eclipse.
Lassen Sie uns ein geeignetes Projekt erstellen und Sample1
als Klasse verwenden.
/**
*Beispiel für eine Datenbankverbindung(Teil 1:Anweisungsmethode)
*
* @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)Bereiten Sie einen URI für die Verbindung vor(Benutzer der Authentifizierungsanweisung, falls erforderlich/Passwort hinzufügen)
String uri = "jdbc:derby:memory:sample;create=true";
// (2)Stellen Sie eine Verbindung mit einer Methode der DriverManager-Klasse her
Connection conn = DriverManager.getConnection(uri);
// (3)Erstellen einer Instanz zum Senden von SQL
Statement st = conn.createStatement();
// (4)SQL-Übertragung
st.executeUpdate("create table sample(id integer primary key)");
Long start = System.currentTimeMillis();
Long delta = start;
//Vorerst 10.000 Loops
for (int i = 0; i < 10000; i++) {
st.executeUpdate("insert into sample values(" + i + ")");
//Geteilte Berechnung
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("Benötigte Zeit: " + (end - start) + "ms.");
// (5)Aufräumen(Erfolgreicher Abschluss der Instanz)
st.close();
conn.close();
}
}
Lassen Sie es uns auf den Punkt bringen.
JDBC erschwert die Abhängigkeit von einer bestimmten Datenbank, Sie können jedoch nur dann eine Verbindung herstellen, wenn Sie wissen, zu welchem Datenbanksystem eine Verbindung hergestellt werden soll. Daher wird eine Zeichenfolge für die Verbindung erstellt (hier wird dies als "Verbindungszeichenfolge" bezeichnet), und die Verbindungsmethode wird durch das Symbol erfasst, das dem darin enthaltenen Konnektor entspricht.
// (1)Bereiten Sie einen URI für die Verbindung vor(Benutzer der Authentifizierungsanweisung, falls erforderlich/Passwort hinzufügen)
String uri = "jdbc:derby:memory:sample;create=true";
jdbc:
ist fest, da es sich um eine Zeichenfolge handelt, die angibt, dass es sich um JDBC handelt.Im Fall von Derby kann ein Bibliothekstyp, der sich der eingebetteten Verwendung bewusst ist, in dieser Form geschrieben werden. Im Fall des Client / Server-Typs (C / S) wird dies hingegen wie eine URL geschrieben. Zum Beispiel "jdbc: derby: // hogeserver / fuga". In beiden Fällen ist eine Speicherdatenbank verfügbar, und durch Eingabe des Schlüsselworts "Speicher" wird eine temporäre Datenbank im Speicher anstatt im Speicher erstellt. In diesem Fall verschwindet es, wenn das System mit DB beendet wird (Programmbeendigung bei integriertem Typ, Serverbeendigung bei C / S usw.).
Im Fall von MySQL ist es im Grunde C / S, also im Format "jdbc: mysql: // hogeserver / fuga".
Stellen Sie nach dem Festlegen der Verbindungszeichenfolge tatsächlich eine Verbindung her.
Es ist jedoch schwierig, die Verbindung vollständig auf der Benutzerseite zu schreiben, so dass es eine Existenz gibt, für die sie gehandelt werden muss, dh die "DriverManager" -Klasse. Lassen Sie uns diesen Kerl verbinden.
Verwenden Sie die statische Methode getConnection ()
, um das Verhalten des wörtlichen ** Erhaltens ** Connection
** zu ermitteln.
// (2)Stellen Sie eine Verbindung mit einer Methode der DriverManager-Klasse her
Connection conn = DriverManager.getConnection(uri);
Die generierte Instanz ist eine "Verbindungs" -Klasse, wie der Methodenname andeutet. Fangen Sie sie daher mit einer Variablen dieser Klasse ab.
Beachten Sie, dass diese Methode einen Sendevorgang erstellt, wenn die Verbindung fehlschlägt. Als Gegenmaßnahme delegieren Sie es entweder mit der "Throws" -Deklaration an den Elternteil oder behandeln Sie es mit "try" ~ "catch". Der Beispielcode wird in "Würfen" geschrieben.
Sobald Sie eine Verbindung hergestellt haben, erstellen Sie eine sogenannte ** Anweisung **, um diese Verbindung mit SQL zu füllen.
// (3)Erstellen einer Instanz zum Senden von SQL
Statement st = conn.createStatement();
Für die verbundene Instanz (hier wird sie von der Variablen "conn" empfangen) fühlt es sich an wie "SQL an Sie senden und ein Fenster vorbereiten". Es ist eine Instanz einer Klasse namens "Statement". Diese Instanz kann wiederholt verwendet werden. Sobald Sie sie erstellt haben, werden Sie sie wahrscheinlich vorerst haben.
Wenn Sie die Anweisung erhalten können, können Sie die SQL-Anweisung hier übergeben und auswerten lassen. Derzeit wird die Methode "execute" verwendet, es gibt jedoch drei Typen. Sie sollten es entsprechend auswählen.
executeUpdate (SQL-Anweisung)
Es wird zum Senden von Update-SQL verwendet, es wird Update genannt, aber im Extremfall ist es möglicherweise besser, ** anders als SELECT ** zu sagen. Wenn es funktioniert, erhalten Sie einen Rückgabewert von ** wie viele Fälle verarbeitet wurden ** (ganzzahliger Wert).
Wird zum Senden von SQL verwendet, um die Ergebnisse in Form einer Tabelle abzurufen. Es geht um eine stumpfe SELECT-Anweisung. Wenn es funktioniert, können Sie die Tabelle erhalten. Diese Tabelle ist eine Instanz einer Klasse namens "ResultSet", aber das ist eine andere Sache.
execute (SQL-Anweisung)
Bei den beiden oben genannten Methoden war es erforderlich, den SQL-Typ zu berücksichtigen und ordnungsgemäß zu verwenden. Dies ist jedoch die Methode, die von einer Person mit dem Namen ** Solch ein Problem ** verwendet wird. Es scheint einfach zu bedienen zu sein, aber es wird wahrscheinlich nicht sehr einfach sein, da Sie abhängig von der Art der Abfrage (ob es sich um ein Update-System handelt oder nicht) eine andere Methode zur Ergebniserfassung anwenden müssen.
Da hier das Update-System verwendet wird, wird "executeUpdate ()" verwendet.
// (4)SQL-Übertragung
st.executeUpdate("create table sample(id integer primary key)");
...(Unterlassung)...
st.executeUpdate("insert into sample values(" + i + ")");
Der vorherige Code sendet eine Abfrage zum Erstellen einer Tabelle. Der Rückgabewert (numerischer Wert) ist Null, da die Tabelle tatsächlich nicht geändert wird. In letzterem Fall fügen wir Werte in die Tabelle ein, aber wir erstellen und senden Zeichenfolgen im laufenden Betrieb. Die Vor- und Nachteile dieses Gesetzes werden an anderer Stelle behandelt.
Am Ende der Verwendung ist es besser, es gemäß dem richtigen Verfahren zu schließen. Möglicherweise werden Auslassungen verarbeitet, daher versuchen wir, diese ordnungsgemäß zu behandeln und mit dem richtigen Verfahren abzuschließen.
// (5)Aufräumen(Erfolgreicher Abschluss der Instanz)
st.close();
conn.close();
Im Fall von Java gibt es keinen klaren Standard dafür, dass das Objekt beim Verlassen des Blocks verschwindet (ein subtiler Schrödinger-Zustand, ob es lebt oder tot ist, bis es durch Müll gesammelt wird), sodass Sie keinen Destruktor erwarten können. Stellen Sie sicher, dass Sie den Beendigungsprozess ordnungsgemäß schreiben.
Wenn ich versuche, diesen Code auszuführen, erhalte ich zwei Fälle.
Wenn es normal funktioniert, wird die Ausgabe so sein.
0: 38ms.
1000: 1142ms.
2000: 892ms.
3000: 748ms.
4000: 634ms.
5000: 560ms.
6000: 595ms.
7000: 667ms.
8000: 681ms.
9000: 537ms.
Benötigte Zeit: 7040ms.
Es ist möglich, alle 1000 Mal Runden zu fahren. Natürlich ändert sich dies je nach Maschinenleistung erheblich.
Wenn Sie Tippfehler weglassen, tritt dieser Fehler normalerweise einmal auf.
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)
Der Fehler lautet "Kein geeigneter Treiber gefunden". Ein Treiber ist ein Konnektor. Da das Lesen des Connectors zur Laufzeit erfolgt, ist es grundsätzlich unmöglich, ihn vor der Ausführung zu überprüfen. Der Connector wird im JAR-Format (Java Class Archive) verteilt, und der Laufzeitklassenpfad muss das Archiv enthalten.
Wenn Sie dies in Eclipse tun, ist es besser, eine Derby-Bibliothek (Benutzerbibliothek) zu erstellen. Wenn Sie es erstellen, Ihrem Erstellungspfad hinzufügen und erneut ausführen, wird es wahrscheinlich funktionieren.
Gleiches gilt bei Verwendung von MySQL. Zu diesem Zeitpunkt ist es einfacher, mit der Benutzerbibliothek zu arbeiten.
Recommended Posts