这是一个示例方法,我想知道使用后是否需要关闭
@RequestMapping("/users")
public String users(Model model) {
try {
Connection connection = getConnection()
Statement stmt = connection.createStatement()
String sql
sql = "SELECT id, first, last, email, company, city FROM cuser"
ResultSet rs = stmt.executeQuery(sql)
StringBuffer sb = new StringBuffer()
List users = new ArrayList<>()
while (rs.next()) {
int id = rs.getInt("id")
String first = rs.getString("first")
String last = rs.getString("last")
String email = rs.getString("email")
String company = rs.getString("company")
String city = rs.getString("city")
users.add(new User(id,first, last, email, company, city))
}
model.addAttribute("users", users)
return "user"
}catch(Exception e) {return e.toString()}
}
我应该如何在此方法结束时关闭连接
非常感谢任何有时间回答的人
最佳答案
好的,这里有几个问题。
首先是数据库连接最终确实需要超时。有时,由于某些报告需要永远或类似的问题,超时会延长到一些荒谬的事情
import java.sql.Connection
import java.sql.DriverManager
import java.sql.PreparedStatement
import java.sql.ResultSet
import java.sql.SQLException
//一个数据库通用的帮助类,用于连接数据库与关闭数据库
public class DBUtil {
//第一步:声明你所需要的一些全局变量
private final static String DRIVER_CLASS="com.microsoft.sqlserver.jdbc.SQLServerDriver"//加载驱动的字符串
private final static String CONN_STR="jdbc:sqlserver://localhost:1433databaseName=testDB"//数据库连接字符串
private final static String DB_USER="sa"//数据用户
private final static String DB_PWD="123456"//数据库登录密码
//第二步:加载数据库驱动(这里是sqlserver)
static{
try{
Class.forName(DRIVER_CLASS)
}catch(ClassNotFoundException e){
e.printStackTrace()//抛出异常
}
}
//第三步:获取数据库连接
public static Connection getConn(){
try {
return DriverManager.getConnection(CONN_STR,DB_USER,DB_PWD)
} catch (SQLException e) {
e.printStackTrace()
}
return null
}
//最后关闭数据库连接
public static void closeConn(ResultSet rs,PreparedStatement pstmt,Connection conn){
try {
if (rs!=null) {//如果返回的结果集对象不能为空,就关闭连接
rs.close()
}
} catch (Exception e) {
e.printStackTrace()
}
try {
if (pstmt!=null) {
pstmt.close()//关闭预编译对象
}
} catch (Exception e) {
e.printStackTrace()
}
try {
if (conn!=null) {
conn.close()//关闭结果集对象
}
} catch (Exception e) {
e.printStackTrace()
}
}
}
没异常,不过浪费资源,占着坑不拉,执行完一次数据库交互就要关闭一次try{
sql...
}catch(...){
//异常信息
}finally{
rs.close()
stmt.close()
conn.close()
//关链接,释放资源
}
楼主说的关了不能执行肯定是把结果集返回,这样编程不行的,因为在上述 *** 作中结果集已经关了,再返回就是空了,我们应该把数据返回,在
try{
list.add{rs.getObject(1)}
///
}
把数据装在list里面,返回list
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)