JDBC之使用懒汉式单例创建JDBC工具类

来源:互联网 发布:炫舞炸家族邀请软件 编辑:程序博客网 时间:2024/05/17 21:46

JdbcUtilsSingleton代码如下:

package cn.itcast.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * 使用单例模式创建JDBC工具类 */public final class JdbcUtilsSingleton {//省略localhost:3306,这些信息通常从配置文件中读取private String url = "jdbc:mysql:///jdbc";private String username = "root";private String password = "root";//懒汉式单例private static JdbcUtilsSingleton singleton;/** * 构造器私用,防止直接创建对象, * 通过反射或反序列化可以破解单例 */private JdbcUtilsSingleton(){}/** * 延迟加载,这个方法必须在JDK5以后执行才不会有问题 * @return */public static JdbcUtilsSingleton getInstance() {if(singleton == null) {//加入有一个线程走到这里,然后又然给另一个线程执行完synchronized(JdbcUtilsSingleton.class) {if(singleton == null) {singleton = new JdbcUtilsSingleton();}}}return singleton;}//保证只是注册一次驱动static{try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {throw new ExceptionInInitializerError(e);}}/** * 获取连接 * @return * @throws SQLException */public Connection getConnection() throws SQLException {return DriverManager.getConnection(url, username, password);}/** * 释放资源 */public void free(ResultSet rs, Statement st, Connection conn) {//规范的关系连接的方式try{if(rs != null) {rs.close();}} catch (SQLException e) {e.printStackTrace();}finally{try{if(st != null) {st.close();}} catch (SQLException e) {e.printStackTrace();}finally {if(conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}}}
测试类代码如下:

package cn.itcast.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * 测试类 */public class BaseSingleton {public static void main(String[] args) throws SQLException, ClassNotFoundException {template();}/** * 比较严谨的实现方式 * @throws ClassNotFoundException  * @throws SQLException  */public static void template() throws ClassNotFoundException, SQLException {Connection conn = null;Statement st = null;ResultSet rs = null;try {//首先需要获取实例,然后获取连接conn = JdbcUtilsSingleton.getInstance().getConnection();//创建语句st = conn.createStatement();//执行语句rs = st.executeQuery("select * from user");//处理结果集while(rs.next()) {System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"+ rs.getObject(3) + "\t" + rs.getObject(4));}} finally {JdbcUtils.free(rs, st, conn);}}}
运行结果:

1 zhangsan 2017-06-30 100.0
2 lisi 2017-06-06 200.0
3 wangwu 2017-05-30 300.0



原创粉丝点击