JDBC连接工具类并发

ly_cyclone 2014-12-11 01:01:14
package com.lanp.ajax.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
* 连接数据库的工具类,被定义成不可继承且是私有访问
* @author lanp
* @since 2012-2-29 22:27
*/
public final class DBUtils {
private static String url = "jdbc:mysql://localhost:3306/mydb";
private static String user = "root";
private static String psw = "root";

private static Connection conn;

static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

private DBUtils() {

}

/**
* 获取数据库的连接
* @return conn
*/
public static Connection getConnection() {
if(null == conn) {
try {
conn = DriverManager.getConnection(url, user, psw);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
return conn;
}

/**
* 释放资源
* @param conn
* @param pstmt
* @param rs
*/
public static void closeResources(Connection conn,PreparedStatement pstmt,ResultSet rs) {
if(null != rs) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
if(null != pstmt) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
if(null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
}
}
}
}


以上的JDBC连接工具类是线程不安全的吧?如果要保证线程安全是不是应该使用ThreadLocal<Connection>
...全文
143 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LOVE-漂泊 2014-12-12
  • 打赏
  • 举报
回复
引用 1 楼 u013972119 的回复:
closeResources中conn.close()后,你应该conn == null;否则下一次getConnection() 获取到的连接是一个关闭的连接,会报SQLException。如果你为了重用连接的话,就不应该关闭连接,并且建立一个单例连接对象,并对获取连接的方法进行同步处理
+1
Mr_sqw 2014-12-11
  • 打赏
  • 举报
回复
closeResources中conn.close()后,你应该conn == null;否则下一次getConnection() 获取到的连接是一个关闭的连接,会报SQLException。如果你为了重用连接的话,就不应该关闭连接,并且建立一个单例连接对象,并对获取连接的方法进行同步处理

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧