JDBC 工具类 - 04

本文介绍了如何优化JDBC工具类,包括从db.properties文件读取配置,静态代码块加载驱动,以及update、insert、delete和select等数据库操作的方法实现。通过预处理SQL语句和PreparedStatement,提高了代码的复用性和安全性。
摘要由CSDN通过智能技术生成

JDBC 工具类 Ⅳ

4.工具类优化
4.1 准备db.properties
# 文件所在位置是src目录下
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/javaee2011?useSSL=false
username=root
password=123456
4.2 使用Properties读取配置文件操作
/*
准备静态成员变量用于保存数据库连接使用的资源内容
 */
private static String jdbcUrl;
private static String username;
private static String password;

/*
利用静态代码块在类文件加载阶段一定会执行的特征,自动加载当前数据库连接所需驱动
 */
static {
    try {
        // 读取Properties属性文件内容
        Properties properties = new Properties();
        
        // 加载指定路径的Properties文件对应当前Properties类
        properties.load(new FileInputStream("./src/db.properties"));
        
        // 通过 Properties 属性类对象根据Key获取对应的值
        jdbcUrl = properties.getProperty("jdbcUrl");
        username = properties.getProperty("username");
        password = properties.getProperty("password");
        
        Class.forName(properties.getProperty("driverClass"));
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }
}
5. update方法
5.1 update方法分析
执行SQL语句流程 核心类 PreparedStatement 
	1. 获取数据库连接对象
	2. 准备SQL语句
	3. 根据SQL语句,预处理操作,得到PreparedStatement对象
	4. 给予PreparedStatement对象 SQL语句对应参数
	5. 执行SQL语句
	6. 关闭资源
	针对update delete insert
	
不同的地方:
	1. SQL语句不同 
	2. 对应SQL语句参数不同
	不同点就是当前update 通用方法的参数,一个是目标执行SQL语句,一个是对应SQL语句的参数列表
	SQL ==> String类型参数
	SQL语句的参数列表 ==> Object... 不定长参数,执行任意数据类型
5.2 update方法实现
@Test
    public void testUpdate() {

        // 1. 数据库连接引用和PreparedStatement引用
        Connection connection = null;
        PreparedStatement statement = null;

        // 2. 获取数据库连接对象
        connection = JdbcUtil.getConnection();

        // 3. 准备需要执行的SQL语句,这里使用 ? 作为参数占位符
        String sql = "update javaee2011.student set name = ?, age = ? where id = ?";
        
        try {
             // 4. 通过Connection数据库连接对象,预处理SQL语句,得到PreparedStatement对象
            statement = connection.prepareStatement(sql);

            // 5. 给予SQL语句参数赋值操作 setXXX(int index, XXX value); 参数下标从1开始
            statement.setObject(1, "ctrl");
            statement.setObject(2, 60);
            statement.setObject(3, 2);

            // 6. 执行SQL语句
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 7. 关闭资源
            JdbcUtil.close(connection, statement);
        }
    }
5.3 其余常用方法
@Test
    public void testInsert() {
        // 1. 数据库连接引用和PreparedStatement引用
        Connection connection = null;
        PreparedStatement statement = null;

        // 2. 获取数据库连接对象
        connection = JdbcUtil.getConnection();

        // 3. 准备需要执行的SQL语句,这里使用 ? 作为参数占位符
        String sql = "insert into javaee2011.student(id, name, age, gender, score, info) values(?,?,?,?,?,?)";

        try {
            // 4. 通过Connection数据库连接对象,预处理SQL语句,得到PreparedStatement对象
            statement = connection.prepareStatement(sql);

            // 5. 给予SQL语句参数赋值操作 setXXX(int index, XXX value); 参数下标从1开始
            statement.setObject(1, 11);
            statement.setObject(2, 22);
            statement.setObject(3, 33);
            statement.setObject(4, 44);
            statement.setObject(5, 55);
            statement.setObject(6, 66);

            // 6. 执行SQL语句
            int i = statement.executeUpdate();

            System.out.println(i);
            
            } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement);
        }
    }
@Test
    public void testDelete() {
        Connection connection = null;
        PreparedStatement statement = null;

        connection = JdbcUtil.getConnection();

        String sql = "delete from javaee2011.student where id = ?";

        try {
            statement = connection.prepareStatement(sql);

            statement.setObject(1, 2);

            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement);
        }

    }

    @Test
    public void testSelectOne() {
        ResultSet resultSet = null;
        Connection connection = null;
        PreparedStatement statement = null;

        connection = JdbcUtil.getConnection();

        String sql = "select * from javaee2011.student where id = ?";

        try {
            statement = connection.prepareStatement(sql);

            statement.setObject(1, 3);

            resultSet = statement.executeQuery();

            Student student = null;

            if (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                boolean gender = resultSet.getBoolean("gender");
                int score = resultSet.getInt("score");
                String info = resultSet.getString("info");

                student = new Student(id, name, age, gender, score, info);
            }

            System.out.println(student);


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement, resultSet);
        }
    }

    @Test
    public void testSelectAll() {
        ResultSet resultSet = null;
        Connection connection = null;
        PreparedStatement statement = null;

        connection = JdbcUtil.getConnection();

        String sql = "select * from javaee2011.student";

        try {
            statement = connection.prepareStatement(sql);

            resultSet = statement.executeQuery();

            ArrayList<Student> list = new ArrayList<>();

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                boolean gender = resultSet.getBoolean("gender");
                int score = resultSet.getInt("score");
                String info = resultSet.getString("info");

                list.add(new Student(id, name, age, gender, score, info));
            }

            for (Student student : list) {
                System.out.println(student);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement, resultSet);
        }
    }
ps. 码边闲话
这样子无限重复式的写代码,不仅繁琐而且浪费时间,最主要的是容易掉头发。
所以,我们把内容重复的代码封装起来,以后需要的时候可以随时调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值