Javaとデータベース接続-JDBC(JDBCの概念を理解する6つのステップ+ JDBCのセットアップと使用、著者のJun Qingqingが提供し、賞賛します!)

JDBCの概要

JDBCの用途は何ですか?

1.jdbcは、Javaアプリケーションとデータベースを接続するために使用されます。jdbcを使用すると、Javaアプリケーションを介してデータベース内のデータを読み取ることができ、データを格納することもできます。

2. Oracle、MySQL、SQLサーバーなどのjdbcを介してさまざまなデータベースに接続できます。

JDBCとは何ですか?

1. JDBC:Java DataBase Connectivityの略語、つまりJavaデータベース接続。SQLステートメントの実行に使用されるJava APIであり、さまざまなリレーショナルデータベースへの統合アクセスを提供できます。Javaで記述された一連のクラスで構成されます。言語とインターフェースの構成。

2.市場に出回っているさまざまなデータベースの最下層が異なり、Java開発会社が市場に出回っているデータベースごとに対応するデータベース接続方法を設計することは不可能であるため、Java開発会社はJDBCなどのクラスを設計することを選択します。インターフェースで構成されるデータベース接続方式は、データベースに対応するJDBC機能を実装するために、それぞれのデータベースの会社によって実装されます。

要約すると、Java APIはデータベースを操作するための標準インターフェースを提供し、最後にさまざまなデータベース開発者がこれらの標準インターフェースを実装してデータベースを操作します。プログラマーは標準仕様の使用法を学ぶだけで済みます。

ここに画像の説明を挿入

JDBC API

JDBC API:java.sqlパッケージに統合された、プログラマーが呼び出すためのクラスとインターフェース。

使用する必要のあるいくつかのクラスとインターフェース:

DriverManagerクラス:さまざまなJDBC接続を管理します。

接続インターフェース:特定のデータベースへの接続。

ステートメントインターフェイス:SQLを実行します

PrepardeStatementインターフェース:SQLを実行します

ResultSetインターフェイス:クエリ結果を受信します

JDBCの構築と使用

説明のために、ここでは開発ツールにIntelliJ IDEA 2020.2.1、mysql8を使用しています。ここでは簡単な紹介です。開発ツールとmysqlの異なるバージョンは使用に影響しませんが、いくつかの小さなポイントが必要です。気をつけて、大部分は問題ありません。

1データベースドライバパッケージをインポートします

ここで使用するドライバーパッケージは

mysql-connector-java-8.0.16.jar

データベースのバージョンに応じて、対応するデータベースドライバパッケージを選択する必要があります。

データベースドライバパッケージをインポートする操作は次のとおりです。

1.プロジェクトプロジェクトの下にlibディレクトリを作成し、ドライバパッケージをlibディレクトリにコピーします。

ここに画像の説明を挿入

2. [ファイル]-> [ライブラリ]-> [+]記号をクリックし、[java]-> [プロジェクト]の下にインポートしたばかりのjarパッケージを選択-> [OK]-> [適用]でプロジェクト構造(優先構造)を見つけます。

ここに画像の説明を挿入

3.データベースドライバパッケージのインポートが完了しました。

2データベースドライバをロードします

JDBCドライバーの登録:これには、データベースとの通信チャネルを開くことができるように、ドライバーの初期IDが必要です。

方法1

リフレクションメカニズムを使用してDriverクラスをロードし、クラスのアドレスを指定します

Class.forName("com.mysql.cj.jdbc.Driver"); //这是mysql8的方式
//利用反射机制加载Driver类
try {
    
    
    Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
    
    
    e.printStackTrace();
}

方法2

DriverManagerを使用して、指定されたドライバーに登録します。

DriverManger.registerDriver(new Driver());
//需要抛一个异常
try {
    
    
    DriverManager.registerDriver(new Driver());
} catch (SQLException throwables) {
    
    
    throwables.printStackTrace();
}

3データベース接続を確立します

ここでは、物理的に接続されたデータベースを表すConnectionオブジェクトを作成するためにDriverManger.getConnection()メソッドが必要です。

Connection connection = DriverManager.getConnection(URL,User,Passwd);
URL: jdbc:mysql://ip(127.0.0.1):端口(3306)/数据库名?characterEncoding=utf-8
	&useSSL=false&serverTimezone=UTC
	?后面的都是参数,使用&符号连接,键=值&键=值
	characterEncoding=utf8 编码格式
    useSSL=false 安全连接,现在为false
    serverTimezone=UTC 时区
User:用户名
Passwd:密码
try {
    
    
	String url = "jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf-8" +
					"&useSSL=false&serverTimezone=UTC";
	Connection connection = DriverManager.getConnection(url,"root","root");
} catch (SQLException throwables) {
    
    
	throwables.printStackTrace();
}

4SQLステートメントをデータベースに送信します

これは主にJavaプログラムを介してデータベースを操作するためのものであり、SQLステートメントを送信するための2つのクラス、StatementとPrepareStatementを学習する必要があります。

ステートメント

SQLステートメントをデータベースに送信するためのStatementオブジェクトを取得します

Statement st = connection.createStatement();

2つの重要な方法

executeUpdate(String sql);
用于执行ddl(结构定义)语句和dml(增,删,改)语句
执行ddl语句返回0,执行dml返回被操作的行数,为Int型


executeQuery(String sql);
用于执行查询语句 返回一个ResultSet集合

注意

使用Statement类发送sql语句需要拼接字符串,拼接字符串的方法为:双引号双加号"+内容+",如果数据库本身的字段为字符串还需要再加上单引号,即'"+内容+"',事例如下
//获得Statement对象
            Statement st = connection.createStatement();

            //发送sql语句
            String name = "小明";
            String sex = "女";
            String age = "18";
            String deptId = "3";

            int res = st.executeUpdate("" +
                    "insert into t_staff(s_name,s_sex,s_age,s_dept_id)" +
                    "values('"+name+"','"+sex+"',"+age+","+deptId+")");
            System.out.println(res);//1,被修改了一行

PrepareStatement

SQLステートメントをデータベースに送信するためのPrepareStatementオブジェクトを取得します

注意,prepareStatement中的参数位置使用占位符?
PrepareStatement ps = connection.PrepareStatement("sql语句,参数位置使用?");

2つの重要な方法

executeUpdate(String sql);
用于执行ddl(结构定义)语句和dml(增,删,改)语句
执行ddl语句返回0,执行dml返回被操作的行数,为Int型


executeQuery(String sql);
用于执行查询语句 返回一个ResultSet集合

注意

为sql语句设置相应参数使用
ps.set相应类型(对应参数位置,参数)
的方法
//获得PrepareStatement
            PreparedStatement ps = connection.prepareStatement(
                    "insert into t_staff(s_name,s_sex,s_age,s_dept_id)" +
                            "values(?,?,?,?)"
            );
            String name = "小暗";
            String sex = "男";
            String age = "19";
            String deptId = "2";

            ps.setString(1,name);
            ps.setString(2,sex);
            ps.setString(3,age);
            ps.setString(4,deptId);

            //发送
            int res = ps.executeUpdate();
            System.out.println(res);

5クエリの結果を受け取ります

ここでは、ResultSetクラスを使用します。

PreparedStatementおよびStatementのexecuteQuery()メソッドはResultSetオブジェクトを返し、クエリ結果はこのオブジェクトにカプセル化されます。

ResultSetのnext()メソッドを使用して、データの次の行を取得します。

getXXX(String name)メソッドを使用して値を取得します。

完全なクエリコードが表示されます

import java.sql.*;

public class Hello {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try {
            String url = "jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf-8" +
                    "&useSSL=false&serverTimezone=UTC";
            Connection connection = DriverManager.getConnection(url, "root", "root");

            //获得PrepareStatement
            PreparedStatement ps = connection.prepareStatement(
                    "select * from t_staff where s_id=?"
            );
            ps.setInt(1,3);

            //发送
            ResultSet res = ps.executeQuery();
            Test test = new Test();
            while(res.next()){
                test.setS_id(res.getInt("s_id"));
                test.setS_name(res.getString("s_name"));
                test.setS_sex(res.getString("s_sex"));
                test.setS_age(res.getInt("s_age"));
                test.setS_dept_id(res.getInt("s_dept_id"));
                test.setS_money(res.getInt("s_money"));
            }
            System.out.println(test.toString());
            //Test{s_id=3, s_name='虞姬', s_sex=女, s_age=29, s_dept_id=3, s_money=2800}

            //关闭连接
            ps.close();
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
class Test{
    private int s_id;
    private String s_name;
    private String s_sex;
    private int s_age;
    private int s_dept_id;
    private int s_money;

    public void setS_id(int s_id) {
        this.s_id = s_id;
    }

    public void setS_name(String s_name) {
        this.s_name = s_name;
    }

    public void setS_sex(String s_sex) {
        this.s_sex = s_sex;
    }

    public void setS_age(int s_age) {
        this.s_age = s_age;
    }

    public void setS_dept_id(int s_dept_id) {
        this.s_dept_id = s_dept_id;
    }

    public void setS_money(int s_money) {
        this.s_money = s_money;
    }

    @Override
    public String toString() {
        return "Test{" +
                "s_id=" + s_id +
                ", s_name='" + s_name + '\'' +
                ", s_sex=" + s_sex +
                ", s_age=" + s_age +
                ", s_dept_id=" + s_dept_id +
                ", s_money=" + s_money +
                '}';
    }
}

6データベース接続チャネルを閉じます

各操作が完了したら、データベースとのすべての接続チャネルを閉じます

方法:close()

おすすめ

転載: blog.csdn.net/Lotus_dong/article/details/113097412