JDBCとは何ですか? この記事はあなたに伝えます

        JDBC の正式名称は Java Database Connect (Java Database connect) で、SQL ステートメントを実行するための Java API のセットです。これは Java とデータベースの間のブリッジであり、実装ではなく仕様であり、 SQL ステートメントを実行することでデータベース内のデータのクエリ、更新、削除などの操作を実行できます。

        

        アプリケーションが JDBC を使用してデータベースにアクセスする方法を次の図に示します。

        上の図からわかるように、アプリケーションが JDBC を使用して特定のデータベースにアクセスする場合、さまざまなデータベース ドライバーに接続する必要があります。データベース ベンダーによって提供されるデータベース ドライバーが異なるため、アプリケーション プログラムがデータベースとの接続を実際に確立できるようにするには、JDBC はデータベースにアクセスするための API を提供するだけでなく、通信の詳細をカプセル化する必要があります。さまざまなデータベース サーバーを使用し、さまざまなベンダーのデータベースに対応する実現方法があります。

        次の図は、JDBC の具体的な実装の詳細を示しています。

上の図からわかるように、JDBC の実装は 3 つの部分で構成されます。

        (1) JDBC ドライバー マネージャー: 主に java.sql.DriverManager クラスを通じて、特定の JDBC ドライバーを登録します。

        (2) JDBC ドライバー API: Sun によって開発され、最も重要なインターフェイスは java.sql.Driver インターフェイスです。

        (3) JDBC ドライバー: データベース メーカーによって作成されたデータベース ドライバーであり、JDBC ドライバーとも呼ばれ、特定のデータベースへの接続と通信の詳細の処理を担当します。

        

JDBCプログラミング手順 

        さまざまなメーカーのデータベースには対応する実装があり、この記事のコードはすべて MySQL データベース用に実装されています。

1.ドライバーを登録する

        コードを記述する前に、MySQL サードパーティ ライブラリをインストールする必要があります。mysql-connector-java-8.0.29-bin.jar パッケージはインターネットからダウンロードするか、MySQL インストール ディレクトリにあります。

    try {
        Driver driver = new com.mysql.cj.jdbc.Driver();
        DriverManager.registerDriver(driver);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

        以下は com.mysql.cj.jdbc.Driver クラスのソースコードです

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

        ドライバーは、Class.forName メソッドを通じてロードすることもできます。このメソッドは、このクラスを JVM にロードします。ロード時に、静的初期化ブロックが実行され、ドライバーの初期化に関連する作業が完了します。 

    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }

2. 接続を確立する

    String url = "jdbc:mysql://localhost:3306/jdbc"; // 数据库URL
    String user = "root"; // 数据库用户名
    String password = "123456"; // 数据库密码
    Connection conn = null;
    try {
        conn= = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

3. データベース操作オブジェクト(プリコンパイル済みオブジェクト)を取得します。

        データベース操作オブジェクトを取得してデータベース挿入操作を実装します。

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String sql= "insert into user(id, name, gender, age) values(2, '张三', '男', 18)"; 
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

       データベース更新操作を実装するためのデータベース操作オブジェクトを取得します。

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String sql = "update user set name = '张三' where age = 20"; // 修改SQL语句
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

        データベース操作オブジェクトを取得し、データベース削除操作を実装します。

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String sql = "delete from user where name = '张三'"; // 删除SQL语句
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

        データベース挿入操作を実装するためにデータベースのプリコンパイル済みオブジェクトを取得します。

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement pre = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "insert into user(id, name, gender, age) values (?, ?, ?, ?)";

            pre = conn.prepareStatement(sql);
            pre.setInt(1,1);
            pre.setString(2,"张三");
            pre.setString(3,"男");
            pre.setInt(4,18);

            pre.executeUpdate();

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

4. クエリ結果セットの処理

        データベース操作オブジェクトを取得し、データベース クエリ操作を実現し、結果セットを出力します。

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String select = "select * from user where name = '张三'";
            rs = stmt.executeQuery(select);
            while (rs.next()) {
                System.out.println(rs.getString("id") + "," + rs.getString("name")
                + "," + rs.getString("gender") + "," + rs.getString("age"));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

        データベースのプリコンパイル済みオブジェクトを取得し、データベース クエリ操作を実装し、結果セットを出力します。

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement pre = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "select * from user where name = ?";

            pre = conn.prepareStatement(sql);
            pre.setString(1,"藏三");

            rs = pre.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("id") + "," + rs.getString("name")
                + "," + rs.getString("gender") + "," + rs.getString("age"));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

5. リソースを解放する

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

        

Statement と PreparedStatement の類似点と相違点、利点と欠点


同じ点: どちらも SQL ステートメントの実行に使用されます

違い: PreparedStatement は SQL ステートメントに従って作成する必要があり、Statement のように文字列の結合を使用する代わりに、パラメーターを設定することで対応する値を指定できます。

PreparedStatement の利点

        1. 可読性の高いパラメータ設定を採用しており、間違えにくい。ステートメントで文字列連結を使用すると、可読性と保守性が低下します。

        2. プリコンパイル機構があり、ステートメントよりもパフォーマンスが高速です。

        3. SQL インジェクション攻撃を効果的に防止できます。

実行と実行更新の違い


同じ点: どちらも追加、削除、変更などの操作を実行できます。

相違点: 1.execute はクエリ ステートメントを実行し、getResult を通じて結果を取得できます。executeUpdate はクエリ ステートメントを実行できません。2.execute はブール型を返します。true はクエリ ステートメントが実行されることを意味し、false は挿入、削除、更新などが実行されることを意味します。executeUpdate の戻り値は int で、影響を受けたデータの数を示します。

        

JDBC の基本的な紹介はこれで終わりです。コメント エリアでの議論を歓迎します。

おすすめ

転載: blog.csdn.net/qq_43500084/article/details/127678124