Da es schwierig war, JDBC (Java Database Connectivity) zu implementieren, das Java und SQL verbindet, werde ich es als Memorandum belassen.
・ Betriebssystem Windows10 ·Editor Ecripse ・ Java OpenJDK 8 ・ SQL MySQL
JDBC (Java Database Connectivity) ist eine API zum Verbinden von Java und RD und zum Betrieb von Java aus. Sie können das JDBC-Konzept verwenden, um Daten von Java in SQL zu registrieren, zu aktualisieren und zu löschen sowie Daten aus SQL abzurufen. Es gibt verschiedene DB-Typen wie Oracle, MySQL, SQL Server usw., und die Methode zum Herstellen einer Verbindung zu jeder DB hängt vom DB-Typ ab. Es wird sich ändern, aber wenn Sie über JDBC eine Verbindung zu einer Datenbank herstellen, können Sie darauf zugreifen, ohne sich um die Individualität jeder Datenbank sorgen zu müssen.
Es gab einen leicht verständlichen Artikel wie die Geschichte von JDBC, also werde ich ihn veröffentlichen. https://data.wingarc.com/what-is-api-16084
Befolgen Sie zur Implementierung das folgende Verfahren, um JDBC zu implementieren. ① JDBC-Treiber wird geladen ② Herstellen einer Verbindung mit SQL ③ SQL-Anweisung senden ④ Erfassung des Ausführungsergebnisses ⑤ Trennen
2-① ① JDBC-Treiber wird geladen
Laden Sie den Treiber (erstellen Sie ein Class-Objekt im Speicher) mit der Class.forName-Methode.
MessageDao.java
public class MessageDao {
//Deklarieren Sie die für die Verbindung benötigten Variablen
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 (){
//JDBC-Treiber wird geladen
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Wenn Sie es in diesem Zustand ausführen, wird der Fehler java.lang.ClassNotFonudException angezeigt. So greifen Sie von einer Java-Anwendung auf die Datenbank zu Zunächst müssen Sie den vom Hersteller bereitgestellten RDBMS-spezifischen JDBC-Treiber abrufen. Darüber hinaus müssen Einstellungen vorgenommen werden, damit der erhaltene JDBC-Treiber aus Java-Programmen verwendet werden kann. Der JDBC-Treiber kann von der Oracle-Website heruntergeladen werden. https://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.htm
Nach Abschluss des Downloads befindet sich eine Datei mit dem Namen "ojdbc8.jar", bei der es sich um den JDBC-Treiber handelt. Platzieren Sie "ojdbc8.jar" um C :.
Um den JDBC-Treiber für Java-Programme verfügbar zu machen, muss er dem Erstellungspfad hinzugefügt werden. Führen Sie daher die folgenden Schritte aus.
Wenn Sie auf Ausführen klicken und keine Ausnahme auftritt, wurde der JDBC-Treiber erfolgreich geladen.
2-② ② Herstellen einer Verbindung mit SQL
Erstellen Sie eine Methode getConnection () in der DriverManager-Klasse, um eine Verbindung zur Datenbank herzustellen. Aktualisieren Sie die Verbindungs-URL, den DB-Benutzernamen und das DB-Kennwort, um auf die Datenbank zu verweisen.
MessageDao.java
public class MessageDao {
//Deklarieren Sie die für die Verbindung benötigten Variablen
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 (){
//JDBC-Treiber wird geladen
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public ArrayList<MessageDto> select() {
ArrayList<MessageDto> list = new ArrayList<>();
//Verbindungsklassendeklaration
Connection con = null;
//Anweisungsklassendeklaration
PreparedStatement ps = null;
//Deklaration der Ergebnismengenklasse
ResultSet rs = null;
//Zugriff auf Datenbank
try {
//Stellen Sie eine Verbindung mit der Datenbank her.
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
}
}
}
Was ist die DriverManager-Klasse? -JDBC-Treibermanagerklasse. Es stehen verschiedene Funktionen für den Zugriff auf den JDBC-Treiber und den Betrieb des RDBMS zur Verfügung. Wenn Sie mit der Methode getConnection eine Verbindung zu RDBMS herstellen und die Verbindung erfolgreich ist, wird ein Verbindungsobjekt mit Informationen zur DB-Verbindung als Rückgabewert zurückgegeben. Die Verbindung wird ausgeführt, indem die Verbindungsinformationen zur Datenbank (Verbindungsziel-Datenbank, Benutzer-ID, Kennwort) im Argument angegeben werden.
Ein Feld, das später zum Speichern der aus SQL extrahierten Ergebnisse verwendet wird.
ArrayList
Da zum Definieren der Daten ein DTO erforderlich ist, erstellen Sie eine MessageDto.java-Klasse, damit die Daten definiert werden können. 2-③ ③ SQL-Anweisung senden Bitten Sie RDB, die SQL-Anweisung mit der executeQuery-Methode oder der executeUpdate-Methode des Objekts vom Typ Statement auszuführen.
MessageDao.java
public class MessageDao {
//Deklarieren Sie die für die Verbindung benötigten Variablen
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 (){
//JDBC-Treiber wird geladen
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public int insert(MessageDto dto) {
//Verbindungsklassendeklaration
Connection con = null;
//Anweisungsklassendeklaration
PreparedStatement ps = null;
//Variable für das Verarbeitungsergebnis (Anzahl der Fälle)
int result = 0;
//Zugriff auf Datenbank
try {
//Stellen Sie eine Verbindung mit der Datenbank her.
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
//Generierung von SQL-Anweisungen (SELECT-Anweisung)
StringBuilder builder = new StringBuilder();
//SQL-Anweisung SELECT*Holen Sie sich alle Fälle mit
builder.append("SELECT *");
builder.append("FROM ");
builder.append(" MESSAGE_BOARD ");
builder.append("ORDER BY ");
builder.append(" ID DESC ");
//Speichern Sie die SQL-Anweisung in der Anweisungsklasse
ps = con.prepareStatement(builder.toString());
}
}
}
Der Builder für den StringBuilder-Typ wird als Variable deklariert, da die Append-Methode die Zeichenfolgen verbindet. Sie können Zeichenfolgen auch mit dem Operator "+" kombinieren. Da die Verarbeitungsgeschwindigkeit des Programms jedoch höher ist, wenn Sie die Append-Methode von StringBuilder verwenden, deklarieren Sie eine Variable vom Typ StringBuilder und kombinieren sie mit der Append-Methode. Ich werde.
2-④ ④ Erfassung des Ausführungsergebnisses
Ruft die Daten des Extraktionsergebnisses der SELECT-Anweisung ab, die mit dem ResultSet-Objekt gesendet wurde.
MessageDao.java
public class MessageDao {
//Deklarieren Sie die für die Verbindung benötigten Variablen
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 (){
//JDBC-Treiber wird geladen
try {
Class.forName(DRIVER_NAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public int insert(MessageDto dto) {
//Verbindungsklassendeklaration
Connection con = null;
//Anweisungsklassendeklaration
PreparedStatement ps = null;
//Variable für das Verarbeitungsergebnis (Anzahl der Fälle)
int result = 0;
//Zugriff auf Datenbank
try {
//Stellen Sie eine Verbindung mit der Datenbank her.
con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);
//Generierung von SQL-Anweisungen (SELECT-Anweisung)
StringBuilder builder = new StringBuilder();
//SQL-Anweisung SELECT*Holen Sie sich alle Fälle mit
builder.append("SELECT *");
builder.append("FROM ");
builder.append(" MESSAGE_BOARD ");
builder.append("ORDER BY ");
builder.append(" ID DESC ");
//Speichern Sie die SQL-Anweisung in der Anweisungsklasse
ps = con.prepareStatement(builder.toString());
//Führen Sie SQL aus und speichern Sie das Erfassungsergebnis in der Ergebnismenge (rs).
rs = ps.executeQuery();
while (rs.next()) {
//Instanziieren Sie Dto, um die Erfassungsergebnisse zu speichern
MessageDto dto = new MessageDto();
//Speichern Sie das Erfassungsergebnis in dto
dto.setId (rs.getInt("id"));
dto.setName (rs.getString("name"));
dto.setMessage (rs.getString("message"));
dto.setCreatedAt(rs.getTimestamp("created_at"));
//Füllen Sie die Liste mit den Daten für einen in Dto gespeicherten Datensatz
list.add(dto);
}
}
}
}
Das ResultSet-Objekt wird als Rückgabewert der executeQuery-Methode der Statement-Klasse empfangen. Es ist ein Objekt, das verwendet werden kann, und die Daten des Extraktionsergebnisses der gesendeten SELECT-Anweisung werden in rs gespeichert. Das von SQL empfangene Ausführungsergebnis kann wiederholt und jeweils einzeln abgerufen werden. Fügen Sie nach Abschluss der Einstellung den Wert hinzu, der in der zuvor generierten leeren Liste festgelegt wurde.
2-⑤ ⑤ Trennen
Da die Verbindung explizit getrennt werden muss, wenn der Zugriff auf die Datenbank abgeschlossen ist, verwenden Sie die Methode close für jedes Verbindungsobjekt, Anweisungsobjekt und ResultSet-Objekt, um die Verbindung zu trennen (schließen).
MessageDao.java
public ArrayList<MessageDto> select() {
ArrayList<MessageDto> list = new ArrayList<>();
//Verbindungsklassendeklaration
Connection con = null;
//Anweisungsklassendeklaration
PreparedStatement ps = null;
//Deklaration der Ergebnismengenklasse
ResultSet rs = null;
//Zugriff auf Datenbank
try {
//Stellen Sie eine Verbindung zur Datenbank her
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 ");
//Speichern Sie die SQL-Anweisung in der Anweisungsklasse
ps = con.prepareStatement(builder.toString());
//Führen Sie SQL aus und speichern Sie das Erfassungsergebnis in der Ergebnismenge
rs = ps.executeQuery();
//Extrahieren Sie die Daten einzeln aus der Ergebnismenge
while (rs.next()) {
//Instanziieren Sie Dto, um die Erfassungsergebnisse zu speichern
MessageDto dto = new MessageDto();
//Speichern Sie das Erfassungsergebnis in Dto
dto.setId (rs.getInt("id"));
dto.setName (rs.getString("name"));
dto.setMessage (rs.getString("message"));
dto.setCreatedAt(rs.getTimestamp("created_at"));
//Füllen Sie die Liste mit den Daten für einen in Dto gespeicherten Datensatz
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();
}
}
//Geben Sie das Erfassungsergebnis an den Anrufer zurück
return list;
}
Damit ist die Implementierung von JDBC abgeschlossen. Durch Hinzufügen, Aktualisieren und Löschen von SQL wird die Art und Weise, wie Verbindungen geschrieben werden, ein wenig geändert. Daher werde ich dies und die JDBC-Vorlage zusammenfassen. Ich hoffe, es wird denjenigen helfen, die JDBC in Zukunft implementieren.
・ 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