これを読むには、JDBCレビューで十分です。

JDBCのフルネームはJavaDataBase Connectivityとも呼ばれ、Javaデータベース接続です。率直に言って、Java言語を使用してデータベースを操作することです。

JDBCの原則

JDBCは主にJavaがデータベースに接続するために使用されます。どのデータベースに接続できるかは指定されていません。実際、JDBCはさまざまな種類のデータベースに接続できます。よく知られているのはoracle、mysql、sqlserverです。データベースの種類が多すぎるため、データベースごとに接続の種類を設定することは、開発者にとって非常に不便です。そこで、Sun社の人々が方法を考え出しました。Sun社は一連のルールを定義します。データベースベンダーはこのルールに従って、APIを実装するための基本原則に基づいて独自のデータベースを作成し、開発者はそれを呼び出すだけでアクセスを実現できます。データベース。この一連のルールはJDBCであり、JDBC仕様データベースの製造元によって作成されたデータベースの基本原則に従ったAPIの実装はドライバーと呼ばれます。
ここに画像の説明を挿入

接続手順

  • 最初のステップ:ドライバーを登録します(機能:接続しようとしているデータベースのブランドをJavaプログラムに通知します)
  • ステップ2:接続を取得します(JVMプロセスとデータベースプロセス間のチャネルが開いており、使用後に閉じる必要があることを示します)
  • ステップ3:データベース操作オブジェクト(SQLステートメントを実行するオブジェクト)を取得します
  • ステップ4:sQLステートメントを実行する(DQL DML ...)
  • 5番目のステップ:線香クエリの結果セットを処理します(このステップは、selectステートメントが4番目のステップで実行された場合にのみ使用できます)
  • ステップ6:リソースを解放します(リソースは使用後に閉じる必要があります)

public class Main {
    // 数据库连接地址
    private static String JDBC_URL = null;
    // 用户名
    private static String JDBC_USER = null;
    // 密码
    private static String JDBC_PASSWORD = null;
    // 驱动
    private static String Driver = null;
    // 储存学生信息
    private static final List<Student> students = new ArrayList<Student>();

    public static void main(String[] args) throws SQLException, IOException {
        // 读取配置文件
        InputStream in = Main.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(in);
        JDBC_URL = properties.getProperty("JDBC_URL");
        JDBC_USER = properties.getProperty("JDBC_USER");
        JDBC_PASSWORD = properties.getProperty("JDBC_PASSWORD");
        Driver = properties.getProperty("Driver");

        // 注册驱动 利用反射加载静态方法块注册
        try {
            Class.forName(Driver);
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驱动程序类 ,加载驱动失败!");
            e.printStackTrace();
        }

        // 获取连接对象
        try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {
            // 需要执行的sql语句
            String sql = "SELECT * FROM student WHERE sdept=?";
            // 获取可执行sql的对象(避免注入攻击)
            try (PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
                // 设置参数
                preparedStatement.setObject(1, "软件工程");
                // 执行
                try (ResultSet rs = preparedStatement.executeQuery()) {
                    /**
                     * 执行查询 .executeQuery() 查
                     * 返回值 ResultSet结果集
                     * 执行更新 .executeUpdate() 增 删 改
                     * 返回值 int(更新数量)
                     */
                    //遍历结果集,取出数据(.next()返回布尔值)
                    while (rs.next()) {
                        Student student = new Student();
                        student.setSno(rs.getString("Sno"));
                        student.setSname(rs.getString("Sname"));
                        student.setSsex(rs.getString("Ssex"));
                        student.setSage(rs.getInt("Sage"));
                        student.setSdept(rs.getString("Sdept"));
                        students.add(student);
                    }
                }
            }
        }

        // 输出结果
        students.forEach(System.out::println);
//        useBatch(students);
    }
    // 只有参数不同的若干语句可以使用batch执行
    public static void useBatch(List<Student> list) throws SQLException {
        try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {
            try (PreparedStatement ps = conn.prepareStatement("INSERT INTO student  VALUES (?, ?, ?, ?, ?)")) {
                // 对同一个PreparedStatement反复设置参数并调用addBatch():
                for (Student s : list) {
                    ps.setString(1, s.getSno() + 1);
                    ps.setString(2, s.getSname());
                    ps.setString(3, s.getSsex());
                    ps.setInt(4, s.getSage());
                    ps.setString(5, s.getSdept());
                    // 添加到batch
                    ps.addBatch();
                }
                // 执行batch:
                int[] ns = ps.executeBatch();
                for (int n : ns) {
                    // batch中每个SQL执行的结果数量
                    System.out.println(n + " inserted.");
                }
            }
        }
    }
}

学生クラス:

public class Student {
    private String Sno;
    private String Sname;
    private String Ssex;
    private String Sdept;
    private int Sage;

    public String getSno() {
        return Sno;
    }

    public void setSno(String sno) {
        Sno = sno;
    }

    public String getSname() {
        return Sname;
    }

    public void setSname(String sname) {
        Sname = sname;
    }

    public String getSsex() {
        return Ssex;
    }

    public void setSsex(String ssex) {
        Ssex = ssex;
    }

    public String getSdept() {
        return Sdept;
    }

    public void setSdept(String sdept) {
        Sdept = sdept;
    }

    public int getSage() {
        return Sage;
    }

    public void setSage(int sage) {
        Sage = sage;
    }

    @Override
    public String toString() {
        return String.format("{Student: id=%s, name=%s, Sex=%s, age=%d, dept=%s}", this.Sno, this.Sname, this.Ssex, this.Sage, this.Sdept);
    }
}

構成ファイル:

Driver = com.mysql.cj.jdbc.Driver
JDBC_URL = jdbc:mysql://localhost:3306/learnjdbc?serverTimezone=GMT
JDBC_USER = root
JDBC_PASSWORD = 123456

データベースフィールド:
![[貼り付け画像20201226200008.png]]

データベース接続パッケージクラス

public class DBUtil {
    // 数据库连接地址
    private static String JDBC_URL = null;
    // 用户名
    private static String JDBC_USER = null;
    // 密码
    private static String JDBC_PASSWORD = null;
    // 驱动
    private static String Driver = null;

    // 构造方法
    private DBUtil() {
    }

    // 静态代码块,只在类加载的时候执行一次。
    static {
        // 读取配置文件
        InputStream in = Main.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        try {
            properties.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        JDBC_URL = properties.getProperty("JDBC_URL");
        JDBC_USER = properties.getProperty("JDBC_USER");
        JDBC_PASSWORD = properties.getProperty("JDBC_PASSWORD");
        Driver = properties.getProperty("Driver");

        try {
            Class.forName(Driver);
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驱动程序类 ,加载驱动失败!");
            e.printStackTrace();
        }
    }
    /**
     * 获取数据库连接对象
     * @throws  SQLException
     * @return 连接对象
     */
    public static Connection getconnection() throws SQLException {
        return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
    }

    /**
     * 关闭资源
     * @param connection 数据库连接对象
     * @param statement 数据库操作对象
     * @param resultSet 数据库查询结果集
     */
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

JDBC接続プール

時間があるときに書いています~~

おすすめ

転載: blog.csdn.net/else_tdk/article/details/111768571