21.JDBC的封装

封装数据库链接

  • 在软件中数据库连接使用非常平凡,如果每次都创建链接,就会造成代码的大量冗余

  • 解决这一问题,常规的做法是建立数据库连接工具,封装数据库连接过程,统一数据库连接过程,使用时候就可以简化代码

封装第一版

public class DBUtils {
    public static Connection getConnection() {
        try {
            String driver = "oracle.jdbc.OracleDriver";
            Class.forName(driver);
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            String user = "system";
            String password = "admin";
            Connection conn = DriverManager.getConnection(url, user, password);
            return conn;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

Properties

  • Java通常将配置文件的扩展名命名为".properties"

  • java.util.Properties就是为了读取 *.properties 文件设计的API,其底层就是文本文件IO

  • Properties本身实现了Map接口,内部是散列表,限定了Key和Value都是String类型

  • 常用方法:

    • void load(流):将文件流中的文件读取为散列表

    • String getProperty(key):查询value,如果没有对应的key,返回null

  • 使用步骤:

    1. 创建Properties对象

    2. 利用load方法读取文件

    3. 利用getProperty查询属性文件的内容

在项目中的reource文件夹中添加配置文件:

在这里插入图片描述

演示:Properties读取resource文件夹中的文件

package demo;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class Demo03 {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        System.out.println(properties);
        System.out.println(properties.size());
        System.out.println(properties.isEmpty());
        InputStream in = DBUtils02.class.getClassLoader().getResourceAsStream("db.properties");
        properties.load(in);
        System.out.println(properties);
        System.out.println(properties.size());
        String url = properties.getProperty("jdbc.url");
        System.out.println(url);
    }
}

封装第二版

package demo;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtils02 {
    static String driver;
    static String url;
    static String username;
    static String password;

    static {
        //初始化静态属性
        //1.利用Properties读取配置文件
        Properties pro = new Properties();
        InputStream in = DBUtils02.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            pro.load(in);
            //2.初始化连接参数
            driver = pro.getProperty("jdbc.driver");
            url = pro.getProperty("jdbc.url");
            username = pro.getProperty("jdbc.username");
            password = pro.getProperty("jdbc.password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, username, password);
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
			throw new RuntimeException(e);
        }
    }

}

封装第二版说明:

  1. dirver、url、username、password是4个数据库连接参数,因为只需要一份,则定义为静态变量

  2. 静态代码块的目的是从配置文件中读取4个数据库连接参数的值,只读取一次即可

封装第三版:标准版

package demo;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtils02 {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;

    static {
        //初始化静态属性
        //1.利用Properties读取配置文件
        Properties pro = new Properties();
        InputStream in = DBUtils02.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            pro.load(in);
            //2.初始化连接参数
            driver = pro.getProperty("jdbc.driver");
            url = pro.getProperty("jdbc.url");
            username = pro.getProperty("jdbc.username");
            password = pro.getProperty("jdbc.password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, username, password);
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
			throw new RuntimeException(e);
        }
    }

    //关闭数据库的连接
    public static void close(Connection conn) {
        if (conn != null) {
            try{
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

使用封装数据库连接过程的工具类

package demo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo04 {
    public static void main(String[] args) {
        Connection conn = null;
        try {
            conn = DBUtils02.getConnection();
            Statement st = conn.createStatement();
            String sql = "select * from demo";
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println(id + "," + name);
            }   
            rs.close();//释放查询结果
            st.close();//释放语句对象
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtils02.close(conn);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: org.springframework.jdbc.core.JdbcTemplate是Spring框架中的一个核心类,它提供了一种简单的方式来执行SQL语句并处理结果集。它封装JDBC API,使得开发人员可以更加方便地使用JDBC来访问数据库。JdbcTemplate提供了许多便捷的方法,如查询、更新、批量更新等,可以大大简化开发人员的工作。 ### 回答2: org.springframework.jdbc.core.JdbcTemplate是Spring框架中提供的一个用于简化JDBC操作的工具类。它是Spring对JDBC API的一个封装,提供了一系列方法来完成JDBC操作,例如执行SQL语句、查询数据、处理结果集等。它可以让开发人员更方便、更高效地访问数据库,降低开发难度和重复工作。 JdbcTemplate的主要特点如下: 1. 简化JDBC编码:JdbcTemplate封装JDBC API,使用JdbcTemplate可以在不编写复杂的JDBC代码的情况下访问数据库。 2. 抽象出通用的DAO方法:JdbcTemplate提供了一些通用的数据库操作方法,例如更新、删除、插入数据等,这些方法可以被用作DAO对象的通用方法。 3. 参数绑定:JdbcTemplate支持参数绑定,使用SQL语句预编译,从而避免了SQL注入等安全问题。 4. 结果集处理:JdbcTemplate提供了ResultSetExtractor和RowMapper接口,用于将结果集转换为Java对象,使数据访问更加方便。 JdbcTemplate的使用步骤如下: 1. 配置数据源:在Spring配置文件中配置数据源,例如使用DriverManagerDataSource、JNDIDataSource等。 2. 创建JdbcTemplate:在业务类中创建JdbcTemplate对象,并注入数据源。 3. 编写SQL语句:根据业务需求编写SQL语句。 4. 执行SQL语句:使用JdbcTemplate执行SQL语句,并处理结果集。 5. 处理结果集:根据业务需求对结果集进行处理,例如将结果集转换为Java对象。 总的来说,JdbcTemplate是Spring框架中的一个重要组件,它的简单使用和强大功能为数据访问层开发者提供了方便和支持。它可以降低JDBC编码难度和重复性,提高开发效率,使我们更专注于业务实现。 ### 回答3: org.springframework.jdbc.core.JdbcTemplate是Spring Framework的核心模块中包含的一个DAO(数据访问对象)框架中的JDBC模块的重要类。这个类提供了一种容易使用的方式来处理JDBC的工作。jdbc.core.JdbcTemplate丰富了JDBC API并简化了JDBC代码的编写,它提供了一个可以执行SQL操作的简单环境。 org.springframework.jdbc.core.JdbcTemplate 提供了一些方法,具体如下: 1. update(String sql,Object... args):更新操作 2. queryForObject(String sql,Class<T> requiredType,Object... args):执行查询返回单个结果对象。 3. queryForList(String sql,Object... args): 执行查询返回一个集合。 4. batchUpdate(String sql,List<Object[]> batchArgs):执行批量更新操作。 5. query(String sql, RowMapper<T> rowMapper, Object... args): 执行查询操作并将返回结果映射到Java对象。 6. query(String sql, ResultSetExtractor<T> rse, Object... args):执行查询并使用应用程序指定的ResultSetExtractor处理结果。 7. execute(String sql):执行给定的SQL操作,无需返回结果。 8. call(CallableStatementCreator csc, List<SqlParameter> declaredParameters):执行从CallableStatementCreator传递的Call方法。 org.springframework.jdbc.core.JdbcTemplate优势如下: 1.不需要抽象模型层的用户必须实现持久层接口,这就更加简介。 2.用不同技术可以确保某些结构。例如,使用jdbcTemplate.getDataSource().getConnection()进行getConnection()操作可以确保代码可以使用任何连接池来创建数据源连接。 3.它完全面向面向对象编程,并提供了特殊的函数来处理大量对象。 totalElements来自jdbcTemplate对padded set的数目的快速计算。 4.可以使用PreparedStatement对象。 综上所述,org.springframework.jdbc.core.JdbcTemplate是一种重要的JDBC工具,它优化了手动处理错误和异常,还提供了令人愉快的映射选项。对于想要使用JDBC可靠性和灵活性的开发人员来说,org.springframework.jdbc.core.JdbcTemplate是一个非常强大的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值