本文共 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/