在三层架构DAL层多次开启和关闭Connection对象好吗?
我的SQLHelper写成是静态的了,DAL层每个查询都从SQLHelper中获取一个PrepareStatement对象,然后每次执行完对应的查询后都会关闭pstmt对象和connection对象,然而这只是在DAL层,在BLL层中一般会调用1-5个DAL的方法,也就是说,一轮业务逻辑下来,Connection对象会开启和关闭1-5次,这样对性能有影响吗?有没有高手帮我改一下,不胜感激!

主要是性能方面的问题,其他的没什么!!!就怕性能不足!!!但是又不想让BLL层接触数据库的东西,达到分层效果。[color=#FF0000][/color]
下面是我的SQLHelper代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 数据库通用逻辑组件
* */
public class SQLHelper {
/** 声明数据库三大连接对象 */
public static Connection conn = null;// 数据库连接对象
public static Statement stmt = null;// 数据库命令执行对象
public static PreparedStatement pStmt = null;//数据库预编译命令执行对象
public static ResultSet rs = null;// 数据库结果集对象
/** 不允许实例化该类 */
private SQLHelper(){}
/** 连接数据库语句 */
//设置数据库连接驱动,默认使用JDBC4进行连接
private static String dbDrive = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//数据库连接地址以及连接的数据库名
private static String dbLocate = "localhost";
private static String dbName = "sq_a1076";
private static String dbPort = "1433";
private static String dbURL = "jdbc:sqlserver://"+ dbLocate +":"+ dbPort +";DatabaseName="+ dbName +"";
// 数据库帐号和密码
private static String dbUser ="" ;//忽略这个吧,我删掉了
private static String dbPwd = "";
//============================================================
// 获取各种连接对象,用于内部使用
//============================================================
/** 获取Connection连接对象 */
private static Connection getConnection() {
Connection conn = null;
try {
Class.forName(dbDrive);
conn = DriverManager.getConnection(dbURL, dbUser, dbPwd);
}
catch (Exception e) {
e.printStackTrace();
}
//判断是否成功生成conn连接对象
if (conn == null) {
System.err.println("警告:数据库连接失败!");
}
return conn;
}// method
/**
* 获取Statement对象
*
* @return 返回一个指针可滚动、可更新的SQL语句执行对象
*/
public static Statement getStatement(){
conn = getConnection();
if(conn == null){
return null;
}
try{
return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}catch(Exception e){
//TO-DO 是否需要关闭Connection?
e.printStackTrace();
return null;
}
}
/**
* 获取PrepareStatement对象
*
* @param sql 特定的带'?'的SQL执行语句
* 示例:String sql = "select * from goods where goodsName=? and goodsType=?";
*
* @return 返回一个预编译指针可滚动、可更新SQL语句执行对象
*/
public static PreparedStatement getPreparedStatement(String sql){
conn = getConnection();
if(conn == null){
return null;
}
try{
return conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);//使用第一个方法
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/** 关闭数据库连接 */
public static void closeConnection() throws Exception{
// 关闭连接对象
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
throw e;
}
}// method
}// class
下面是DAL层中其中一个SQL原子执行语句:
public User findUserByUserName(String userName) throws Exception {
User user = null;//一个可以指向用户对象的变量
String sql = "select userName,userTypeId,personId from [User] where userName=?";
pstmt = SQLHelper.getPreparedStatement(sql);
pstmt.setString(1, userName);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
user = new User();
user.setUserName(rs.getString(1));
user.setUserTypeId(rs.getInt(2));
user.setPersonId(rs.getInt(3));
}
pstmt.close();
SQLHelper.closeConnection();
return user;
}
感激各位大神的帮助
相关推荐
C#三层架构项目开发全过程
完整的.NET三层架构开发项目,包含sqlserver数据库文件,值得好好学习。
C#三层架构+Vue+AjaxPro工程实践
三层架构是企业级Web应用解耦与可维护性的基础设计范式,其核心在于业务逻辑、数据访问与表现层的职责分离与契约化协作。结合C#与SQLServer构成的稳定后端生态,通过AjaxPro实现C#方法到前端JavaScript的强类型直连调用,规避REST接口的序列化开销与契约管理成本;再以Bootstrap作为样式与布局基础设施,Vue专注交互逻辑与状态驱动,形成低学习门槛、高协同效率的前后端分工模式。该组合在教务系统等中大型内部管理平台中,显著提升并发处理能力、规则变更响应速度与7×24小时稳定性,适用于需兼
C#三层架构实战:Bootstrap+Vue+SQL Server生产级学生系统
三层架构是企业级.NET应用的核心设计范式,其本质在于通过接口契约、依赖倒置与运行时隔离实现业务逻辑、数据访问与用户界面的严格分层。它并非简单的文件夹划分,而是保障可测试性、可维护性与技术演进能力的工程基石。结合Bootstrap提供响应式UI基建、Vue处理高交互局部状态、AjaxPro实现WebForms环境下的安全异步通信,并依托SQL Server连接池优化、索引策略、存储过程封装等五层数据库加固手段,可构建出真正支撑高并发、易扩展、强安全的教务类生产系统。本文聚焦C# .NET Framework
三层架构的实现
与ASP相比ASP.NET在Web应用开发上无疑更容易,更有效率。Web开发大部分还是围绕着数据操作,建立数据库存储数据,编写代码访问和修改数据,设计界面采集和呈现数据。走过Asp.net学习入门阶段后,真正开始着手开发一个Web项目时,才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的,而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键,由此也对三层架构模式有了初步体验。
NET三层架构简单解析
NET三层架构简单解析,有需要的可以下载来看下


