java多线程访问数据库的问题
大家知道一般写数据库的程序的话都会写一个数据库层来分离隐藏数据库操作
但是这里我一直有一点想不大通,比如你的数据库层提供了一个接口getName返回某数据项的Name属性
那么代码一般应该这样(简化的代码)
getName(..)
{
//这里整个数据库层公用一个stmt
stmt.execute("sql");
rs = stmt.getResultSet();
name = rs.getString(1);
return name;
}
这里我们发现如果整个数据库层共用一个stmt的话在多线程程序中就会产生问题,譬如执行到execute以后另一个线程调用了另一个获取属性的函数,比如getAge,那么getResultSet就会返回不同的结果,造成错误
然而如果每次都createStatement的话却似乎无法关闭stmt,因为getString得到的结果还要到外面的应用层使用,而java都是传引用的,如果关闭了stmt这个返回的String是不是还会有效呢?不知道createStatement造成的资源消耗到底如何
不知道大家都是怎么解决这个问题的,谢谢!