JDBC工具类封装

340 阅读3分钟

一、JDBC功能详解

在上一篇中有使用到DriverManagerConnectionStatementResultSet。这里具体说下

驱动管理对象DriverManager

DriverManager管理一组 JDBC 驱动程序的基本服务。DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。

getConnection(获取到数据库的连接并返回连接对象)

语法如下

static Connection getConnection(String url, String user, String password);
返回值:Connection数据库连接对象
- url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
- user:用户名
- password:密码

数据库连接对象Connection

获取执行对象

  • 第一种:Statement createStatement();
  • 第二种:PreparedStatement prepareStatement(String sql);

prepareStatement(String sql) 会进行预编译,防止SQL注入,优先使用这种。

事务管理

开启事务:setAutoCommit(boolean autoCommit); // false:开启事务,true:关闭事务。
提交事务:commit();
回滚事务:rollback();
释放资源:void close();

执行对象Statement

在使用createStatementprepareStatement语法会有不同。

// createStatement
String sql = "SELECT * FROM user";
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery(sql);

// prepareStatement
String sql = "SELECT * FROM student";
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();

执行语句

  • int executeUpdate(String sql)
    • 返回值int:返回影响的行数。
    • 可以执行insert、update、delete语句。
  • ResultSet executeQuery(String sql)
    • 返回值ResultSet:封装查询的结果。
    • 参数sql:可以执行select语句。
  • 释放资源:void close();

结果集对象ResultSet

  • boolean next()
    • 有数据:返回true,并将索引向下移动一行
    • 没有数据:返回false
  • 获取结果集数据
    • getXXX:XXX是返回值得类型,比如返回的是Int,那么就是getInt("id"),VARCHAR则getString("name");
  • 释放资源:void close();

二、抽取工具类

在当前这种模式下,注册驱动,获取数据库链接,释放资源都是重复的,因此可以抽取一个工具类

配置文件

这在src目录下创建config.properties配置文件

driverClass=com.mysql.jdbc.Driver // 驱动信息
url=jdbc:mysql://xxxxxxxxx:3306/db1 // 数据库url
username=username // 用户名
password=password // 密码

创建工具类

utils下创建工具类JDBCutils。工具类的实现步骤

  • 私有构造方法
private JDBCUtils(){};
  • 声明配置
private static String driverClass;
private static String url;
private static String username;
private static String password;
private static Connection con;
  • 读取配置文件,注册驱动
static {
    try {
        // 先获取当前类的class对象,然后再获取当前的类加载器,获取资源文件的输入流。
        InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("config.properties");

        // 创建Properties集合,加载流对象的信息
        Properties prop = new Properties();
        prop.load(is);

        // 变量赋值
        driverClass = prop.getProperty("driverClass");
        url = prop.getProperty("url");
        username = prop.getProperty("username");
        password = prop.getProperty("password");

        //注册驱动
        Class.forName(driverClass);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  • 提供连接数据库的方法
public static Connection getConnection() {
        try {
            con = DriverManager.getConnection(url,username,password);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return con;
}

  • 提供释放资源的方法
// 确认数据对象,执行对象,结果集对象是否存在,存在则释放资源
public static void close(Connection con, Statement stat, ResultSet rs) {
        if(con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(stat != null) {
            try {
                stat.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
}

public static void close(Connection con, Statement stat) {
     close(con,stat,null);
}

调用方式

  • 获取数据库连接
con = JDBCUtils.getConnection();
  • 释放资源
JDBCUtils.close(con,stat);

不足之处,欢迎留言支持!!!