JDBCUtils工具类的使用

JDBCUtils

  • 目的:简化书写
  • 分析:
    • 1,注册驱动
    • 2,抽取一个方法获取连接对象
      • 需求不想传递参数,但是还要保证工具类的通用性
      • 解决:配置文件
        • jdbc.properties
        • url =
        • username =
        • password =
        • driver =

一,先看一下原来的连接操作

        Connection conn = null;
		Statement state = null;
		ResultSet rs = null;
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql:///ab1","root","root");
			String sql = "select *from stu";
		    state = conn.createStatement();
		    rs = state.executeQuery(sql);
			while (rs.next()) {
				Singer singer = new Singer();
				singer.setId(rs.getInt("id"));
				singer.setUsername(rs.getString("username"));
				singer.setAge(rs.getInt("age"));
				singer.setSex(rs.getInt("sex"));
				singer.setGrade(rs.getInt("grade"));				
				ls.add(singer);
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			
			try {
				//判断一下防止空指针异常
				if (rs!=null) {
					rs.close();
				}
				if (state!=null) {
					state.close();
				}
				if (conn!=null) {
					conn.close();	
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}

还要写这么多的参数,注册驱动等而且还要释放这么多,每次我们连接一次数据库都需要重复一遍上边的操作,所以就用JDBCUtils工具类简化一下书写。

二,使用步骤

  1. 创建jdbc.properties配置文档
  2. 创建一个jdbcutils包,然后创建一个工具类JDBCUtils

1,创建jdbc配置文档
在这里插入图片描述
里面的配置内容为:

url = jdbc:mysql://localhost:3306/连接的数据库名称
username = root
password = root
driver = com.mysql.jdbc.Driver

2,创建JDBCUtils工具类
在这里插入图片描述
代码如下:

package jdbcutils;

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

public class JDBCUtils {
	//通过静态代码块,因为在加载类的时候就会把静态代码块加载进来,而且只加载一次
	private static String url;
	private static String username;
	private static String password;
	private static String driver;
	
	static{
		try {
		//1,通过当前类获取类加载器
		ClassLoader classLoader = JDBCUtils.class.getClassLoader();
		//2,获取一个输入 流
		InputStream is = classLoader.getResourceAsStream("jdbc.properties");
		//3,创建一个properties对象集合
		Properties ps = new Properties();
		//4,加载输入流
		ps.load(is);
		url = ps.getProperty("url");
		username = ps.getProperty("username");
		password = ps.getProperty("password");
		driver = ps.getProperty("driver");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//5,获取相关参数的值

		
	}
	public static Connection getConnection() {
		
		Connection conn = null;
		
		try {
			
			Class.forName(driver);
		    conn = DriverManager.getConnection(url,username,password); 
		
		
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return conn;
		
	
	}
	//释放资源
	public static void release(Statement state,Connection conn,ResultSet rs) {
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (state!=null) {
			try {
				state.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}

然后就可以使用啦

测试用例对比

        Connection conn = null;
		Statement state = null;
		ResultSet rs = null;
		List<Singer> ls = new ArrayList<Singer>();
		try {
		    conn = JDBCUtils.getConnection();
			state = conn.createStatement();
			String sql = "select *from stu";
		    rs = state.executeQuery(sql);
			while (rs.next()) {
				Singer singer = new Singer();
				singer.setId(rs.getInt("id"));
				singer.setUsername(rs.getString("username"));
				singer.setAge(rs.getInt("age"));
				singer.setSex(rs.getInt("sex"));
				singer.setGrade(rs.getInt("grade"));
				ls.add(singer);
				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(state, conn, rs);
		}

连接: conn = JDBCUtils.getConnection();
释放: conn = JDBCUtils.getConnection();
两行代码搞定!是不是方便简化了许多。

发布了24 篇原创文章 · 获赞 12 · 访问量 11万+
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览