用单例类封装数据库操作,简略代码如下:
public final class DBCommon {
private DBCommon() {
//这里配置数据库连接池信息 }
public static DBCommon getInstance() {
// 应用单例[件]模式确保类本身只有一个实例
if (dbCommon == null) {
dbCommon = new DBCommon();
}
// 返回类本身的实例
return dbCommon;
}
private Connection getConnection() {//从数据库连接池获取connection
}
private PreparedStatement getPreparedStatement{//获取PreparedStatement}
public ResultSet executeQuery(String sql){//获取ResultSet
}
我的疑问是数据库连接池只有一个,Connection对象有多个,getConnection()方法前面要不要synchronized来防止线程并发来防止多线程并发
public final class DBCommon {
private DBCommon() {
//这里配置数据库连接池信息 }
public static DBCommon getInstance() {
// 应用单例[件]模式确保类本身只有一个实例
if (dbCommon == null) {
dbCommon = new DBCommon();
}
// 返回类本身的实例
return dbCommon;
}
private Connection getConnection() {//从数据库连接池获取connection
}
private PreparedStatement getPreparedStatement{//获取PreparedStatement}
public ResultSet executeQuery(String sql){//获取ResultSet
}
我的疑问是数据库连接池只有一个,Connection对象有多个,getConnection()方法前面要不要synchronized来防止线程并发来防止多线程并发
解决方案 »
- extjs怎么完成上传文件功能——后台是java接收
- 我让jsp页面处理完后自动转到一个servlet,如何实现
- sql server2005驱动无法加载,但单独测试正常,请高手帮忙。急!
- 怎样才能把整个项目中的某个Servlet文件用Dos命令单独编译呢?
- 在index.jsp主页中,Board中的数据库信息总是显示不出来,哪位高人帮忙看看哪里出现问题了!!
- 连接MYSQL问题
- 如何在下拉列表框里选择一个值后跳出新窗口?
- 再问session内部机制(如何利用cookie的)
- 急用!查询oracle数据库,用javascript或java有什么不同?服务器要用什么软件支持?
- 无声仿有声 飞碟 收分 :)
- Struts2、hibernate、spring 这三个框架的作用 和 特点 以及 好处是什么?
- 关于Struts2整合JFreeChart
是有必要的
有些人经常误解有多个Connection 对象 其实只有一个。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import oracle.jdbc.driver.OracleDriver;import com.ccit.xyy.util.staconstant.Constant;
/**
* @author XYY
* @创建时间 2010年02月20日23点05分
* @version 1.0
* @描述 连接数据库,未使用数据源
* @类名 DBUtilsTwo
*/
public class DBUtilsTwo { private static DBUtilsTwo instance = null; public static synchronized Connection getConnection() { if (instance == null) {
instance = new DBUtilsTwo();
}
Connection conn = null;
OracleDriver driver = new OracleDriver();
try {
DriverManager.registerDriver(driver);
conn = DriverManager.getConnection(Constant.getDB_URL_ORACLE(),
Constant.getDB_USER_ORACLE(), Constant
.getDB_PASSWORD_ORACLE());
} catch (SQLException e) {
e.printStackTrace();
} return conn;
}
/**
* 关闭连接
* @param conn
* @param pstmt
* @param rs
*/
public static void finalize(Connection conn, PreparedStatement pstmt,
ResultSet rs) { if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭连接(无结果集)
* @param conn
* @param pstmt
*/
public static void finalize(Connection conn, PreparedStatement pstmt) { if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭连接
* @param conn
* @param cstmt
* @param rs
*/
public static void finalize(Connection conn, CallableStatement cstmt,
ResultSet rs) { if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (cstmt != null) {
try {
cstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭连接(无结果集)
* @param conn
* @param cstmt
*/
public static void finalize(Connection conn, CallableStatement cstmt) { if (cstmt != null) {
try {
cstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}}