项目中数据库的操作

来源:互联网 发布:立白皂液怎么样 知乎 编辑:程序博客网 时间:2024/06/10 14:05
下面介绍的是本人在开发中的一点心得,如有不恰当之处还请指出,谢谢!微笑微笑微笑
项目中数据库操作,在开发中开启数据库过程中做到能关闭的尽量在每次操作完成后关闭,使用原始方式连接数据库如下:
private String queryUseNatureCodeBy(String riskCode,
String queryUseNatureName) throws Exception{
String usenaturename = queryUseNatureName;
List<String> useNatureCodeList = new ArrayList<String>();
// " SELECT a.useNatureName FROM prpdriskusenaturemapping a WHERE a.riskCode = ? and useNatureCode =?";
String sql = "select usenaturecode from prpdriskusenaturemapping where ";
// hql.append("and useNatureCode =?");
sql+=" riskCode = '"+riskCode+"'";
sql+="and useNatureName = '"+usenaturename+"'";
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
conn = super.getHibernateTemplate().getSessionFactory().getCurrentSession().connection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
String useNatureCode = "";
while (rs.next()&&rs!=null && !rs.equals("")) {
useNatureCode= rs.getString(1);
useNatureCodeList.add(useNatureCode);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(rs != null) {
rs.close();
}
if(ps !=null){
ps.close();
}
if(conn != null) {
conn.close();
}
}
if (useNatureCodeList.size() > 0) {
return useNatureCodeList.get(0);
} else {
return "n";
}
}
1:上面的代码中:
conn
=super.getHibernateTemplate().getSessionFactory().getCurrentSession().connection();
连接数据库使用的是hibernate来数管理据库,之前使用的session是conn = super.getHibernateTemplate().getSessionFactory().openSession().connection()
在测试过程中发现少量的数据操作时不会发省异常,但是,一旦大量操作就会严重影响运行效率,卡顿;因为hibernate不会管理openSession(),所以在多次操作过程中session资源不足,影响效率。而使用getCurrentSession()方式获取的sessionhibernate会在程序执行完成后自动关闭;
2:在这次使用中解决以上问题后在查询上千条数据时还是出现数据库问题,结果发现每次运行后PreparedStatement 未关闭,关闭之后测试正常。
阅读全文
0 0
原创粉丝点击