Detaillierte JDBC-Programmierung von MySQL

1. JDBC-Programmierkonzept

In tatsächlichen Projekten werden die meisten unserer Datenbankoperationen über Code ausgeführt, und verschiedene Datenbanken stellen bei ihrer Entwicklung eine Reihe von Programmierschnittstellen-APIs bereit. Daher verwenden verschiedene Unternehmen unterschiedliche Datenbanksoftware, sodass für Programmierer sehr hohe Lernkosten anfallen, da sie die Programmierstile und zugehörigen Grammatiken für verschiedene Datenbanken erlernen müssen. Es ist also auf der Java-Ebene, also JDBC, vereinheitlicht. Große Datenbankhersteller verpacken ihre eigenen nativen API-Schnittstellen, um Datenbanktreiberpakete zu bilden, und JDBC wird durch die Sammlung von Datenbanktreiberpaketen verschiedener Datenbanken gebildet.
JDBC, nämlich Java Database Connectivity, Java-Datenbankverbindung. Ist eine Java-API zum Ausführen von SQL-Anweisungen,
einer Datenbankverbindungsspezifikation in Java.
Diese API besteht aus einigen Klassen und Schnittstellen in den Paketen java.sql.* und javax.sql.*. Sie stellt eine Standard-API für Java- Entwickler zum Betrieb von Datenbanken bereit und kann einen einheitlichen Zugriff auf verschiedene relationale Datenbanken ermöglichen.

1.1 Funktionsprinzip von JDBC

JDBC bietet eine einheitliche Zugriffsmethode für eine Vielzahl relationaler Datenbanken. Als abstrakte Abstraktion der herstellerspezifischen Datenbankzugriffs-API umfasst es hauptsächlich
einige gängige Schnittstellenklassen.
JDBC-Zugriffsdatenbankhierarchie:

Fügen Sie hier eine Bildbeschreibung ein

1.2 Vorteile von JDBC

  1. Der Betrieb der Java-Sprachzugriffsdatenbank ist vollständig auf die abstrakte Schnittstellenprogrammierung ausgerichtet
  2. Die Entwicklung von Datenbankanwendungen muss nicht auf die API eines bestimmten Datenbankanbieters beschränkt sein
  3. Die Programmportabilität wird erheblich verbessert

2. JDBC-Nutzung

2.1 Download des JDBC-Treiberpakets

Die erste besteht darin, das Treiberpaket zu installieren. Das Treiberpaket kann von der offiziellen MySQL-Website bezogen werden, die offizielle Website von Oracle ist jedoch schwierig zu verwenden. Sie können es auch zu Github herunterladen und zum Maven Central Warehouse gehen Um es herunterzuladen (dieser Maven ähnelt einem Anwendungsspeicher für Softwareprogramme der Computerserie), hier
verwenden wir Maven zum Herunterladen

  1. Öffnen Sie die Website https://mvnrepository.com/
  2. Suchen Sie nach MySQL-bezogener Software
    Fügen Sie hier eine Bildbeschreibung ein
  3. Klicken Sie auf den ersten oder zweiten (MySQL-Connector-Java).
    Fügen Sie hier eine Bildbeschreibung ein
  4. Wählen Sie dann die entsprechende Version aus. Beachten Sie, dass die Hauptversionsnummer hier mit der Version des Datenbankservers übereinstimmen muss. Beispielsweise verwendet mein MySQL-Datenbankserver Version 5, daher muss mein Treiberpaket auch Version 5 verwenden.
    Fügen Sie hier eine Bildbeschreibung ein
  5. Aufrufen der Download-Seite
    Fügen Sie hier eine Bildbeschreibung ein
  6. Das Suffix der von uns heruntergeladenen Datei ist .jar, was als komprimiertes Paket mehrerer .class-Dateien verstanden werden kann
    Fügen Sie hier eine Bildbeschreibung ein

2.2 Installation und Import des Treiberpakets

  1. Nachdem wir das Treiberpaket (eine .jar-Datei) heruntergeladen haben, erstellen wir zunächst ein neues Projekt in der Idee
    Fügen Sie hier eine Bildbeschreibung ein
  2. Unter dem Projekt erstellen wir ein Verzeichnis
    Fügen Sie hier eine Bildbeschreibung ein
  3. Kopieren Sie dann die heruntergeladene .jar-Datei und fügen Sie sie in dieses Verzeichnis ein
    Fügen Sie hier eine Bildbeschreibung ein
    Fügen Sie hier eine Bildbeschreibung ein
  4. Markieren Sie das Verzeichnis als Bibliothek. Nachdem Sie es als Bibliothek markiert haben, kann idea die .jar-Datei erkennen. Sie können also die Klasse im Inneren aufrufen, um Code zu schreiben.
    Fügen Sie hier eine Bildbeschreibung ein
  5. Nachdem der Import erfolgreich war, können wir mit der normalen Programmierung beginnen. Wir erstellen die Klasse JDBCIsert unter der src-Datei
    Fügen Sie hier eine Bildbeschreibung ein

2.3 Die Verwendung von JDBC in IDEA

Nachdem wir eine neue Klasse und eine Hauptmethode erstellt haben, beginnen wir mit der Programmierung. JDBC muss die Entwicklung durch die folgenden Schritte abschließen

2.3.1 Erstellen und initialisieren Sie eine Datenquelle

  1. Erstellen und initialisieren Sie MysqlDataSource.
    Die sogenannte Datenquelle ist die Quelle, aus der die Daten stammen. Sie beschreibt, wo sich der Datenbankserver befindet. Wir beschreiben ihn über die DataSource-Schnittstelle.
    Aber DataSource selbst ist eine Schnittstelle, eine abstrakte Klasse und kann nicht direkt neu sein. Daher sind wir tatsächlich ein neues MysqlDataSource-Objekt seiner Unterklasse, um die DataSource-Schnittstelle zu implementieren.

Fügen Sie hier eine Bildbeschreibung ein

DataSource dataSource = new MysqlDataSource();//这里实际是向上转型,子类实现父类接口

Dies reicht jedoch nicht aus. Wir müssen einmal einen Downcast durchführen und dann umkehren, da wir die Methoden setUrl, setUser und setPassword verwenden müssen. Diese Methode gilt nur für die Unterklasse MysqlDataSource, die übergeordnete Klasse nicht, also Downcast.

  1. URLs festlegen
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false);

Die beiden oben genannten Codezeilen können also tatsächlich als folgender Code geschrieben werden

MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false);

URL ist ein eindeutiger Ressourcen-Locator, ein in Computernetzwerken gebräuchlicher Begriff, der zur Kennzeichnung des Standorts von Netzwerkressourcen verwendet wird.
Unsere Eingabe hier ist "jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false"
zunächst jdbceinmal festgelegt, mysqlnämlich die von uns verwendete Datenbank, also 127.0.0.1:3306die IP-Adresse. Die MySQL-Datenbank ist eine „Client-Server“-Struktur. Der Client und der Server kommunizieren über das Netzwerk. Der Standort des Hosts auf dem Das Netzwerk wird durch die IP-Adresse bestimmt. Und 127.0.0.1 stellt die Loopback-Adresse dar, die die lokale IP darstellt, da sich der Server und der Client von MySQL, die wir getestet haben, auf demselben Gerät (unserem eigenen Host) befinden. 3306 ist die Portnummer, die zur Unterscheidung verschiedener Anwendungen verwendet wird. Die Standardportnummer des Datenbankservers ist 3306. base1Dies ist der Name der Datenbank, d. h. create database 数据库名der Name der darin enthaltenen Datenbank, wenn wir SQL-Anweisungen schreiben. characterEncoding=utf8Zeigt an, dass der Zeichensatz utf8 verwendet useSSL=falseund SSL ein Verschlüsselungsprotokoll ist, was bedeutet, dass hier keine Verschlüsselung erfolgt.

  1. Legen Sie Benutzernamen und Passwort fest
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("120198087zbh");

Der Benutzername wird einheitlich als Standardwert root geschrieben, schreiben Sie keine anderen Werte; das Passwort entspricht dem Passwort, das wir bei der Installation von MySQL geschrieben haben.

2.3.2 Verbindung herstellen

Connection connection = dataSource.getConnection();

Fügen Sie hier eine Bildbeschreibung ein
Hier wird jedoch ein Fehler gemeldet. Dies ist eine geprüfte Ausnahme. Wir werfen sie direkt aus. Achten Sie darauf, sie auszulösen und das Ausnahmepaket zu importieren.

Dann erhalten wir es mit der Connection-Schnittstelle. Beachten Sie, dass wir beim Empfang einer Verbindung die Verbindung im Paket java.sql verwenden müssen, da sie sonst nicht kompiliert wird, und die Verbindung im Paket mysql nicht verwenden.

Fügen Sie hier eine Bildbeschreibung ein

Der Code hier kann zuerst ausgeführt werden, um festzustellen, ob ein Fehler vorliegt.

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.SQLException;

public class JDBCInsert {
    
    
    public static void main(String[] args) throws SQLException {
    
    
        //JDBC需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl();
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");
        //2.建立连接
        Connection connection = dataSource.getConnection();
    }
}

2.3.3 SQL-Anweisung erstellen

In der DOS-Umgebung öffnen wir unser MySQL, erstellen eine Datenbank und erstellen eine Tabelle.

Enter password: ************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database base1 character set utf8mb4;
Query OK, 1 row affected (0.00 sec)
mysql> use base1;
Database changed
mysql> create table student(student_id int primary key auto_increment,student_name varchar(20));
Query OK, 0 rows affected (0.02 sec)

Wenn ich jetzt Daten in Java hinzufügen möchte, dann schreibe den folgenden Code in IDEA

//3.构造SQL语句
String sql = "insert into student values(1,'张三')";//创建一个sql语句
PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql

Lassen Sie den Client vorkompilieren, die Arbeit des Servers wird einfacher und der Druck geringer. Unter PreparedStatement versteht man eine im Voraus vorbereitete Statement-Anweisung

2.3.4 SQL-Anweisung ausführen

Nachdem wir die SQL-Anweisung (vorkompiliert) erstellt haben, müssen wir sie an den Server senden und die Anweisung ausführen

int ret  = statement.executeUpdate();//executeUpdate的返回值为int
System.out.println("ret = "+ ret);

Die Einfüge-, Aktualisierungs- und Löschvorgänge verwenden alle die MethodeexecuteUpate, und ihr Rückgabewert ist int, der angibt, wie viele Zeilen betroffen sind. Tatsächlich ist die 0 in den betroffenen Zeilen in unserer DOS-Umgebung (wie in der Abbildung unten gezeigt). der Rückgabewert.
Die Auswahloperation verwendet die MethodeexecuteQuery

Fügen Sie hier eine Bildbeschreibung ein
Nachdem wir diesen Satz ausgeführt haben, können wir zu MySQL gehen, um zu überprüfen, ob die Daten eingefügt wurden

mysql> select * from student;
+------------+--------------+
| student_id | student_name |
+------------+--------------+
|          1 | 张三         |
+------------+--------------+
1 row in set (0.01 sec)

Es wurde festgestellt, dass es tatsächlich eingefügt war.

2.3.5 Ressourcen freigeben

  1. Bei der Kommunikation zwischen Client und Server der Datenbank werden bestimmte Ressourcen (einschließlich CPU, Speicher, Festplatte, Bandbreite usw.) verbraucht. Wenn die Anzahl der Clients groß genug ist, dürfen die Clients nicht nach Belieben belegt und konsumiert werden, d. h. sie sollten sich bei Nichtgebrauch befreit fühlen.
  2. Aussage (Anweisung) und Link (Verbindung) werden in einer bestimmten Reihenfolge freigegeben, und wer sie zuerst erstellt, gibt sie frei.
statement.close();
connection.close();

2.3.6 Ergänzende Angaben

In diesem Beispiel fügen wir Daten über nsert into student values(1,'张三')eine solche Hartcodierung ein, um sie abzuschließen. In tatsächlichen Projekten muss diese Eingabe jedoch vom Benutzer auf der Konsole eingegeben werden.
Der Code kann also so umgeschrieben werden


import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsert {
    
    
    public static void main(String[] args) throws SQLException {
    
    

        Scanner scanner = new Scanner(System.in);
        //JDBC需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl();
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");//设置url
        ((MysqlDataSource)dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");//设置密码
        //2.建立连接
        Connection connection = dataSource.getConnection();//异常抛出
        //3.控制台输入
        System.out.println("请输入学号:");
        int student_id  = scanner.nextInt();
        System.out.println("请输入姓名:");
        String student_name = scanner.next();
        //4.构造SQL语句
        String sql = "insert into student values(" + student_id+ ",'" + student_name + "')";//创建一个sql语句
        PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql
        //5.执行SQL语句
        int ret  = statement.executeUpdate();//executeUpdate的返回值为int
        System.out.println("ret = "+ ret);
        //6.释放资源
        statement.close();
        connection.close();
    }
}

Aber dieser Code ist immer noch ziemlich hässlich.

Es gibt einen besseren Weg, es zu schreiben, der mit Hilfe der Assembly-Funktion von PreparedStaterment realisiert werden kann.

String sql = "insert into student values(?,?)";//用?(占位符)来先取代两个参数的位置
PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql
statement.setInt(1,student_id);//将第一个占位符所表示的整型参数替换为student_id
statement.setString(2,student_name);//将第二个占位符所表示的字符串参数替换为student_name

Dann kann unser vollständiger Code wie folgt aussehen:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCInsert {
    
    
    public static void main(String[] args) throws SQLException {
    
    

        Scanner scanner = new Scanner(System.in);
        //JDBC需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl();
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");//设置url
        ((MysqlDataSource)dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");//设置密码
        //2.建立连接
        Connection connection = dataSource.getConnection();//异常抛出
        //3.控制台输入
        System.out.println("请输入学号:");
        int student_id  = scanner.nextInt();
        System.out.println("请输入姓名:");
        String student_name = scanner.next();
        //4.构造SQL语句
//        String sql = "insert into student values(" + student_id + ",'" + student_name + "')" ;//创建一个sql语句
        String sql = "insert into student values(?,?)";//用?(占位符)来先取代两个参数的位置
        PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql
        statement.setInt(1,student_id);//将第一个占位符所表示的整型参数替换为student_id
        statement.setString(2,student_name);//将第二个占位符所表示的字符串参数替换为student_name
        //5.执行SQL语句
        int ret  = statement.executeUpdate();//executeUpdate的返回值为int
        System.out.println("ret = "+ ret);
        System.out.println(statement);//如果我们发现出错,我们可以将statement打印出来,观察一下是不是我们的SQL语句写错了;
        //6.释放资源
        statement.close();
        connection.close();
    }
}

Wenn bei der Projektentwicklung ein Fehler auftritt, können wir gleichzeitig feststellen, ob in meiner SQL-Anweisung ein Fehler vorliegt, indem wir die Anweisung ausdrucken.
Ergebnisse der
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Derzeit ist unser JDBC auf eine Weise wie DataSource geschrieben.
Es gibt auch eine Möglichkeit, DriveManager zu schreiben, der die Klassen im Treiberpaket durch Reflektion lädt und weitere Folgevorgänge ausführt.
DataSource wird jedoch weiterhin empfohlen, da die Lesbarkeit des reflektierten Codes sehr schlecht ist und es für den Compiler schwierig ist, die Richtigkeit des Codes zu überprüfen. Darüber hinaus verfügt DataSource über einen integrierten Datenbankverbindungspool, der Verbindungen wiederverwenden und die Effizienz der Verbindung zu Servern verbessern kann.
Das Wesen des Pools im Computer ist ein Voranwendungsmechanismus, der Raum für Zeit nutzt.

2.4 IDEA implementiert den MySQL-Abfragevorgang

Beispiel

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCSelect {
    
    
    public static void main(String[] args) throws SQLException {
    
    
        Scanner scanner = new Scanner(System.in);
        //1.创建并初始化数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL
        System.out.println("请输入查询语句");
        String sql = scanner.nextLine();
//        String sql  = "select * from student";
        //4.预执行
        PreparedStatement statement = connection.prepareStatement(sql);
        //5.执行SQL语句
        ResultSet resultSet = statement.executeQuery();//resultSet就是select里面创建的临时表
        //6.遍历结果集合
        while(resultSet.next()){
    
    //这个效果和迭代器类似
            //把resultSet想象成一个表格,同时有一个光标指向表格的最上面
            //每一次调用next,光标都会往下走一行
            //当光标指向某一行的时候就可以通过getXXX等方法来获取当前行对应的列里面的数据。
            //当这个表都遍历完了,next就会返回false;
            int id = resultSet.getInt("student_id");
            //getXXX方法必须类型匹配
            //getXXX方法的参数可以是列名,也可以是下标
            String name = resultSet.getString("student_name");
            System.out.println("id = " + id +", name - " + name );
        }
        //7.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

Ergebnis
Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

Origin blog.csdn.net/baixian110/article/details/131119371
Recomendado
Clasificación