博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC之使用懒汉式单例创建JDBC工具类
阅读量:2350 次
发布时间:2019-05-10

本文共 2614 字,大约阅读时间需要 8 分钟。

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

转载地址:http://bklvb.baihongyu.com/

你可能感兴趣的文章
Redis 方案
查看>>
ZooKeeper 数据与存储配置
查看>>
ZooKeeper 安装部署
查看>>
ZooKeeper 配置
查看>>
11.组合模式--Composite
查看>>
12.轻量模式--Flyweight
查看>>
13.外观模式--Facade
查看>>
开源史上最成功的八个开源软件
查看>>
More Effective C++读书笔记
查看>>
关于assert,ASSERT,TRACE和VERIFY
查看>>
关于C++中野指针的说明
查看>>
Linux/Unix环境下的make和makefile详解
查看>>
SourceInsight添加对汇编语言文件.s和.S的支持
查看>>
windows 下实现函数打桩:拦截API方式
查看>>
获取Windows系统版本
查看>>
漫谈兼容内核之十二:Windows的APC机制
查看>>
21.windbg-.lastevent、!analyze(dump分析、异常错误码查询)
查看>>
16.windbg-.frame、dt(切换局部上下文、查找结构体)
查看>>
开源任务管理器 Process Hacker (Windows)
查看>>
快速发现Windows中毒的工具:Process Hacker
查看>>