pgjava连接关闭

pgjava连接关闭,第1张

我注意到我最近无法访问我的 PostgreSQL。我允许的所有 20 个连接都用完了。我不明白为什么,因为我什么都没有打开。似乎即使在 PC 关闭或其他情况下,事情仍然保持打开状态。我正在使用本地工作的远程真实数据库,并且当我使用相同的数据库实时推送它时。

这是一个示例方法,我想知道使用后是否需要关闭

@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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6604999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存