Detaillierte Java-JDBC

 
Detaillierte Java-JDBC
 

JDBC häufig verwendete Schnittstellen und Klassenbibliotheken

1.DriverManager: Serviceklasse, die den JDBC-Treiber steuert

2.Verbindung: Datenbankverbindungsobjekt

3. Anweisung: Das Objekt, das SQL ausführen soll

4. PreparedStatement: Das Objekt, das SQL ausführt

5. ResultSet: Ergebnismengenobjekt, kapselt Abfrageergebnisse

Schritte zur Verwendung von JDBC

Login-Übung

JDBC-Tools

Login-Code

 Die Erstellung ist nicht einfach. Wenn dieser Blog für Sie hilfreich ist, denken Sie bitte daran, eine Nachricht zu hinterlassen.  


JDBC ist eine wichtige Schnittstelle für Java-Programme zur Verbindung mit Datenbanken. Es ist eine wichtige Brücke zum Erstellen von Java-Programmen und -Datenbanken. Es beschreibt eine Standardbibliothek für den Zugriff auf relationale Datenbanken und bietet eine Standardsystemstruktur für Datenbankanbieter. Mit JDBC können Benutzer auf jede Form von Tabellendaten zugreifen, den Ausführungsprozess: 1. Stellen Sie eine Verbindung zur Datenquelle her. 2. Übergeben Sie Abfrage- und Aktualisierungsanweisungen an die Datenbank. 3. Verarbeiten Sie die Datenbankantwort und geben Sie das Ergebnis zurück.

Wenn Sie mit häufig verwendeten SQL-Anweisungen nicht vertraut sind, springen Sie zuerst hierher! ! Die am häufigsten verwendete SQL-Anweisung im Verlauf

JDBC häufig verwendete Schnittstellen und Klassenbibliotheken

 

1.DriverManager: Serviceklasse, die den JDBC-Treiber steuert

Die Hauptfunktion besteht darin, den Treiber zu registrieren und das Verbindungsobjekt zu erhalten

 1. Registrieren Sie den Treiber: Teilen Sie dem Programm mit, welcher Datenbanktreiber jar verwendet werden soll

//注册与给定的驱动程序 DriverManager
static void registerDriver(Driver driver) ;


//写代码使用 
Class.forName("com.mysql.jdbc.Driver");        

2. Datenbankverbindung herstellen:

方法: statische Verbindung getConnection (String-URL, String-Benutzer, String-Passwort) 

Parameter:

          URL: Geben Sie den Pfad der Verbindung an

          Benutzer: Benutzername

          Passwort: Passwort 

          Syntax: jdbc: mysql: // IP-Adresse (Domänenname): Portnummer / Datenbankname, Benutzer, Kennwort

          Details: Wenn Sie eine Verbindung zum nativen MySQL-Server herstellen und der Standardport des MySQL-Dienstes 3306 ist, kann die URL wie folgt abgekürzt werden: jdbc: mysql: /// Datenbankname      

//获取数据库连接对象Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");

2.Verbindung: Datenbankverbindungsobjekt

Jede Verbindung stellt eine physische Verbindungssitzung dar. Um auf die Datenbank zugreifen zu können, müssen Sie zuerst eine Datenbankverbindung herstellen.

Gängige Methoden:

       1.  Holen Sie sich das Objekt, um SQL auszuführen

              Anweisung createStatement ()

              PreparedStatement prepareStatement (String sql)  

       2.  Managementangelegenheiten:

             Transaktion starten: setAutoCommit (boolean autoCommit): Rufen Sie diese Methode auf, um den Parameter auf false zu setzen, dh die Transaktion zu starten

             Übernehmen Sie die Transaktion: commit () 

             Rollback der Transaktion: rollback () 

3. Anweisung: Das Objekt, das SQL ausführen soll

Statemet ist eine Tool-Schnittstelle zum Ausführen von SQL-Anweisungen. Das Objekt kann DDL-, DCL-Anweisungen oder DML-Anweisungen ausführen. Beim Ausführen von SQL-Abfragen wird die Ergebnismenge der Abfrage zurückgegeben.

Hauptmethode

                1.  boolean execute (String sql): Diese Methode kann jede beliebige SQL-Anweisung ausführen. Verstehe einfach  

                2.  int executeUpdate (String sql): DML-Anweisungen (Einfügen, Aktualisieren, Löschen) und DDL-Anweisungen (Erstellen, Ändern, Löschen) ausführen

                       Rückgabewert: Die Anzahl der betroffenen Zeilen, anhand derer bestimmt werden kann, ob die DML-Anweisung erfolgreich ausgeführt wird

                       Wenn der Rückgabewert> 0 ist, ist die Ausführung erfolgreich, andernfalls schlägt sie fehl.

                3.  ResultSet executeQuery (String sql): Führen Sie die DQL-Anweisung (select) aus

                       Diese Methode kann nur verwendet werden, um Abfrageanweisungen auszuführen und das ResultSet-Objekt zurückzugeben, das dem Abfrageergebnis entspricht. 

 

4. PreparedStatement: Das Objekt, das SQL ausführt

PreparedStatement ist ein vorkompiliertes Anweisungsobjekt. PreparedStatement ist eine Unterschnittstelle von Statement. Es ermöglicht der Datenbank das Vorkompilieren von SQL-Anweisungen. In Zukunft müssen Sie nur die SQL-Befehlsparameter ändern, um zu vermeiden, dass die Datenbank SQL-Anweisungen jedes Mal kompiliert Zeit, so ist die Leistung besser. Vorkompiliertes SQL löst das Problem der SQL-Injection. Vorkompiliertes SQL: Verwenden Sie? Als Platzhalter für Parameter.

Gängige Methode

        boolean execute (): Führen Sie die SQL-Anweisung in diesem PreparedStatement-Objekt aus. Die Anweisung kann eine beliebige Art von SQL-Anweisung sein.

        int executeUpdate (): PreparedStatement- Objekt dieser SQL - Anweisung auszuführen, muss es eine SQL - Datenmanipulationssprache (DML) Anweisungen, wie sein INSERT, UPDATEoder  ist DELETE, oder das Rück keine SQL - Anweisung, beispielsweise Aussagen DDL.

       ResultSet executeQuery (): Führen Sie die SQL-Abfrage in diesem PreparedStatement-Objekt aus und geben Sie ResultSetdas von der Abfrage generierte Objekt zurück.

Da PreparedStatement eine Unterschnittstelle von Statement ist, sind ihre allgemeinen Methoden sehr konsistent. PreparedStatement ist hauptsächlich vorkompiliertes SQL, das das Problem der SQL-Injection löst und die Leistung verbessert.

5. ResultSet: Ergebnismengenobjekt, kapselt Abfrageergebnisse

ResultSet ist ein Ergebnisobjekt, das Methoden für Abfrageergebnisse enthält. ResultSet kann die Daten in der Spalte über den Index oder die Spaltennamensklasse abrufen.

Gängige Methode

            boolean next (): Bewegen Sie den Cursor eine Zeile nach unten, um festzustellen, ob die aktuelle Zeile das Ende der letzten Zeile ist (ob Daten vorhanden sind). Wenn dies der Fall ist, wird false zurückgegeben. Wenn nicht, wird true zurückgegeben

            void beforeFirst (): Positionieren Sie den Datensatzzeiger des ResultSet auf die Anfangsposition vor der ersten Zeile.

            Boolesches Absolut (int row): Verschiebt den Datensatzzeiger der Ergebnismenge in die Zeilenzeile.

            getXxx (Parameter): Daten abrufen

                 Xxx: repräsentiert den Datentyp wie: int getInt (), String getString ()

                 Parameter:

                    1.  int: repräsentiert die Nummer der Spalte, beginnend mit 1, wie zum Beispiel: getString (1)

                    2.  String: repräsentiert den Spaltennamen. Wie zum Beispiel: getDouble ("balance")

Schritte zur Verwendung von JDBC

Schritte zum statischen Kompilieren von SQL: Use Statement

 

 

1.  Importieren Sie das Treiber-JAR-Paket mysql-connector-java-5.1.37-bin.jar

         1. Kopieren Sie mysql-connector-java-5.1.37-bin.jar in das libs-Verzeichnis des Projekts

         2. Klicken Sie mit der rechten Maustaste -> Als Bibliothek hinzufügen

  2.  Registrieren Sie den Fahrer

  3.  Rufen Sie das Datenbankverbindungsobjekt Verbindung ab

  4.  Definieren Sie SQL

  5.  Rufen Sie die Objektanweisung ab, die die SQL-Anweisung ausführt

  6.  Führen Sie SQL aus und akzeptieren Sie das zurückgegebene Ergebnis

  7.  Ergebnisse verarbeiten

  8.  Geben Sie Ressourcen frei

Kompilieren Sie SQL-Schritte dynamisch: Verwenden Sie das PreparedStatement-Objekt

 

 1.  Importieren Sie das Treiber-JAR-Paket mysql-connector-java-5.1.37-bin.jar

 2.  Registrieren Sie den Fahrer

 3.  Rufen Sie das Datenbankverbindungsobjekt Verbindung ab

 4.  Definieren Sie SQL

          * Hinweis: Wozu werden SQL-Parameter verwendet? Als Platzhalter. Zum Beispiel: Wählen Sie * vom Benutzer aus, wobei Benutzername =? Und Passwort = ?;

  5.  Holen Sie sich PreparedStatement Connection.prepareStatement (String sql) 

  6.  Geben? Zuordnung:

          * Methode: setXxx (Parameter 1, Parameter 2)

                  * Parameter 1:? Die Positionsnummer beginnt bei 1

                  * Parameter 2:? Wert von

  7.  Führen Sie SQL aus und akzeptieren Sie das zurückgegebene Ergebnis, ohne die SQL-Anweisung zu übergeben

  8.  Ergebnisse verarbeiten

  9.  Geben Sie Ressourcen frei

public static void main(String[]args)throwsException{
	//1.导入驱动jar包
	//2.注册驱动
	Class.forName("com.mysql.jdbc.Driver");
	//3.获取数据库连接对象Connection
	Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
	//4.定义SQL
	Stringsql="update emp set salary=8001 WHERE id=1001;";
	//5.执行SQL语句对象Statement
	Statementstmt=conn.createStatement();
	//6.执行SQL,接收返回结果
	intcount=stmt.executeUpdate(sql);
	//7.处理结果
	System.out.println(count);
	//8.释放资源
	stmt.close();
	conn.close();
}

Login-Übung

JDBC-Tools

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/**
 * JDBC工具类
 */
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    /**
     * 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
     */
    static{
        //读取资源文件,获取值。

        try {
            //1. 创建Properties集合类。
            Properties pro = new Properties();

            //获取src路径下的文件的方式--->ClassLoader 类加载器
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL res  = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
          
            //2. 加载文件
            pro.load(new FileReader(path));

            //3. 获取数据,赋值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4. 注册驱动
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    /**
     * 获取连接
     * @return 连接对象
     */
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url, user, password);
    }

    /**
     * 释放资源
     * @param stmt
     * @param conn
     */
    public static void close(Statement stmt,Connection conn){
        if( stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 释放资源
     * @param stmt
     * @param conn
     */
    public static void close(ResultSet rs,Statement stmt, Connection conn){
        if( rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

Login-Code

public class DemoLogin {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入账号:");
        String userName = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
        boolean flag = new DemoLogin().login2(userName, password);
        if (flag) {
            System.out.println("登录成功!");
        } else {
            System.out.println("账号或密码错误!");
        }

    }

    public boolean login(String name, String password) {
        //账号密码正确性校验
        if (name == null || password == null) {
            return false;
        }
        Connection conn = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            conn = JDBCUtils.getConn();
            statement = conn.createStatement();
            String sql = "SELECT*FROM login WHERE username='" + name + "'andpassword='" + password + "';";
            System.out.println(sql);
            resultSet = statement.executeQuery(sql);
            return resultSet.next();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JDBCUtils.close(conn, statement, resultSet);
        }
        return false;
    }


    //使用PreparedStatement传参
    public boolean login2(String name, String password) {
        //账号密码正确性校验
        if (name == null || password == null) {
            return false;
        }

        Connection conn = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            conn = JDBCUtils.getConn();
            String sql = "SELECT*FROM login WHERE username=? and password=?;";
            //预编译SQL
            statement = conn.prepareStatement(sql);
            System.out.println(sql);
            //给参数赋值
            statement.setString(1, name);
            statement.setString(2, password);
            //执行查询
            resultSet = statement.executeQuery();
            return resultSet.next();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JDBCUtils.close(conn, statement, resultSet);
        }
        return false;

    }
}

Schwerwiegende Vorteile : Wenn Sie der Meinung sind, dass der obige Code problematisch ist, springen Sie bitte zum nächsten Blog " Java-Spring JDBC ". Sie werden feststellen, dass der Rest des Frameworks dies für Sie erledigt, solange Sie SQL-Anweisungen schreiben können.

Die Erstellung ist nicht einfach. Wenn dieser Blog für Sie hilfreich ist, denken Sie bitte daran, eine Nachricht zu hinterlassen.  

Ich denke du magst

Origin blog.csdn.net/promsing/article/details/112792723
Empfohlen
Rangfolge