JDBC 入门介绍以及 DAO 模式简单介绍

JDBC(Java Database Connectivity) 使用步骤

  1. 下载 JDBC 相应数据库的 jar 包加入项目下的 lib 文件夹中
    此处使用 mysql,对应 mysql 的 jar 包下载地址:
    mysql-connector-java-8.0.13.jar
  2. 创建一个专门用作操作数据库操作的类 DBUtils,下面示例在 DBUtils 中写一个查找本地的数据库 student 中一个叫 student 的表中的所有记录
  3. 基本步骤
    a. 注册数据库驱动
    b. 获取连接 Connection 对象
    c. 创建 Statement 对象
    d. statement 对象执行 SQL 语句得到 ResultSet
    e. 遍历得到的 ResultSet 得到结果
  4. 完整代码及注释
    import org.junit.Test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    	
    public class DBUtils {
    
        @Test
        public void findAll() throws IOException, ClassNotFoundException {
    
            Connection connection = null;
            Statement statement = null;
            ResultSet rs = null;
    		// 通过 Properties 对象或许建立 Connection 对象需要的参数的值
            Properties properties = new Properties();
            properties.load(new FileInputStream(new File("jdbc.properties")));
            // 注册驱动,似乎现在是可以省略的,获取 Connection 对象时会自动注册
            Class.forName(properties.getProperty("driver"));
            try {
                // 获取数据库 url,此处为 "jdbc:mysql://localhost/student", 最后一个 student 是在本地数据库上的一个数据库名
                String url = properties.getProperty("url");
                String user = properties.getProperty("user");
                String password = properties.getProperty("password");
                connection = DriverManager.getConnection(url, user, password);
                statement = connection.createStatement();
                // 需要执行的 SQL 语句,此处是查询操作,根据需要编写不同语句
                String query = "SELECT * FROM student";
                // 查询语句对应的方法是 executeQuery 方法,另如 update 操作对应的则是 executeUpdate 方法
                // 不同的方法返回的 rs 对象也不同,基本通过打一下 . 这个符号就知道该怎么操作了
                rs = statement.executeQuery(query);
    			// 此处只是对查询到的记录做了简单的打印处理
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("stu_name");
                    int age = rs.getInt("age");
                    System.out.println("Id: " + id + ", Name: " + name + ", Age: " + age + ".");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                // finally 中关闭资源
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (statement != null) {
                    try {
                        statement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

DAO(Data Access Object) 模式简单介绍

DAO 即一个用于数据库操作的对象
实现步骤:

  1. 新建一个 dao 接口,声明数据库访问规则(一系列与数据库操作直接相关的,对数据库进行更新、查询、删除、修改等操作的方法)
  2. 新建一个 dao 实现类,具体实现 dao 接口中定义的方法
  3. 新建一个 dao 实现类对象,直接使用其中的方法与数据库交互

Statement 的安全问题,PreparedStatement

Statement 执行是先拼接 sql 语句后执行的,以前易存在“注入攻击”的问题,因此现在用 PreparedStatementPreparedStatement 会在执行前做语法规则校验。

PreparedStatement 使用介绍:
Statement 对象是在写好 sql 语句的字符串后执行;
PreparedStatement 不将 sql 语句的参数直接拼接成 sql 语句的字符串,而是创建了 PreparedStatement 对象后通过 set…() 等方法传入 (…处为参数对应数据类型)
代码实例:

String sql = "SELECT * FROM user WHERE username=? AND password=?";
// 如果用 Statement,上述对应的 sql 语句中的问号则会直接换成实际的值
PreparedStatement ps = connection.preparedStatement(sql);
// 没错,下标从 1 开始,1 表示在第 1 个 ? 的位置插入 username 的值
ps.setString(1, username);
ps.setString(2, password);
// 若是添加、更新、删除操作则使用 executeUpdate() 方法
ps.executeQuery();

猜你喜欢

转载自blog.csdn.net/qq_37427344/article/details/83386066
今日推荐