Jam*_* P. 8 java synchronization dao jdbc
以下是我目前在抽象DAO类中使用的方法.如果有并发呼叫,它们是安全的还是应该同步使用?我知道如果存在对方法范围之外的属性的引用,则应该使用同步,但是我不清楚如何使用外部资源来处理事情.
public Connection getConnection() {
// Call to singleton handling JDBC stuff
return Database.getInstance().getCon();
}
public boolean isConnectionAvailable(){
if( getConnection() != null ){
return true;
}
return false;
}
public PreparedStatement getPreparedStatement( String sqlStatement ){
Connection connection = getConnection();
PreparedStatement pS = null;
if( connection != null ){
try {
pS = connection.prepareStatement( sqlStatement );
} catch (SQLException e) {
return null;
}
}
return pS;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我可能会重新编写这个问题,以包含有关编写DAO的信息,因为它在这里很重要.
duf*_*ymo 13
我根本不同意这种实施方式.
首先,应通过拥有工作单位和交易的服务向DAO提供其连接信息.
其次,我没有看到界面.
第三,我没有看到模型或域对象.
第四,准备好的陈述应该只是内部实施的一部分.如果他们从你的DAO中泄漏出来,你做错了.
第五,将准备好的陈述从对象中传出,使得关闭它并清理得更不清楚.你的DAO很快就会死于资源泄漏.
这是一个通用DAO的接口.你会注意到它是所有的CRUD操作,没有提到java.sql包中的连接或任何接口:
package persistence;
import java.io.Serializable;
import java.util.List;
public interface GenericDao<T, K extends Serializable>
{
T find(K id);
List<T> find();
List<T> find(T example);
List<T> find(String queryName, String [] paramNames, Object [] bindValues);
K save(T instance);
void update(T instance);
void delete(T instance);
}
Run Code Online (Sandbox Code Playgroud)
你可以走很长的路.这是一个更好的抽象.这T是您的业务对象类型,并且K是主键.