相关疑难解决方法(0)

虽然Connection之后关闭,但必须单独关闭JDBC结果集和语句吗?

据说在使用后关闭所有JDBC资源是一个好习惯.但是,如果我有以下代码,是否有必要关闭Resultset和Statement?

Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
    conn = // Retrieve connection
    stmt = conn.prepareStatement(// Some SQL);
    rs = stmt.executeQuery();
} catch(Exception e) {
    // Error Handling
} finally {
    try { if (rs != null) rs.close(); } catch (Exception e) {};
    try { if (stmt != null) stmt.close(); } catch (Exception e) {};
    try { if (conn != null) conn.close(); } catch (Exception e) {};
}
Run Code Online (Sandbox Code Playgroud)

问题是连接的关闭是否完成了工作,或者是否使用了一些资源.

java jdbc

245
推荐指数
6
解决办法
18万
查看次数

java.sql.SQLException: - ORA-01000:超出最大打开游标数

我收到了ORA-01000 SQL异常.所以我有一些与之相关的问题.

  1. 最大打开游标是否与JDBC连接数完全相关,或者它们是否与我们为单个连接创建的语句和结果集对象相关?(我们正在使用连接池)
  2. 有没有办法配置数据库中的语句/结果集对象的数量(如连接)?
  3. 是否建议在单线程环境中使用实例变量statement/resultset对象而不是方法local statement/resultset对象?
  4. 在循环中执行预准备语句会导致此问题吗?(当然,我本可以使用sqlBatch)注意:一旦循环结束,pStmt就会关闭.

    { //method try starts  
      String sql = "INSERT into TblName (col1, col2) VALUES(?, ?)";
      pStmt = obj.getConnection().prepareStatement(sql);
      pStmt.setLong(1, subscriberID);
      for (String language : additionalLangs) {
        pStmt.setInt(2, Integer.parseInt(language));
        pStmt.execute();
      }
    } //method/try ends
    
    { //finally starts
       pStmt.close()
    } //finally ends 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果在单个连接对象上多次调用conn.createStatement()和conn.prepareStatement(sql)会发生什么?

Edit1: 6.使用Weak/Soft引用语句对象是否有助于防止泄漏?

Edit2: 1.有什么办法,我可以在项目中找到所有缺少的"statement.close()"吗?我知道这不是内存泄漏.但我需要找一个符合垃圾收集条件的语句引用(不执行close())?有什么工具可用?或者我必须手动分析它?

请帮我理解.

在Oracle DB中查找已打开的用户名-VELU的游标

转到ORALCE机器并以sysdba启动sqlplus.

[oracle@db01 ~]$ sqlplus / as sysdba 
Run Code Online (Sandbox Code Playgroud)

然后跑

SELECT   A.VALUE,
    S.USERNAME,
    S.SID,
    S.SERIAL#
  FROM V$SESSTAT A,
    V$STATNAME B,
    V$SESSION S
  WHERE A.STATISTIC# = B.STATISTIC#
    AND …
Run Code Online (Sandbox Code Playgroud)

java jdbc

110
推荐指数
3
解决办法
31万
查看次数

使用数据库游标有什么好处?

它基于我面临的面试问题.

非常简短的定义可以

它可用于操纵查询返回的行.

除了使用光标(分列在这里的MSDN),我在我的脑海的一个问题是,如果我们可以利用执行查询或存储过程中的所有操作(如果我没有错,就像我们可以使用Transact-SQL对于ms-sql),我们应该使用游标吗?

sql database cursor

41
推荐指数
3
解决办法
5万
查看次数

Java/JDBC:发生异常时关闭数据库连接的最佳设计模式

我是Java的新手(我使用的是Java 6).我一直在使用以下设计模式为我的所有Java POJO和servlet通过GlassFish 3.1.2 Web服务器访问Oracle 11G数据库.

当所有可用进程(或会话,不确定区别是什么)被消耗时,我得到间歇性数据库错误(ORA-12519),这导致我以某种方式思考应用程序未发布进程.

查看下面的设计模式,是否有更好的方法可以确保在发生异常时释放与数据库的JDBC连接?例如,我是否还应该将if ( conn != null) conn.close();代码放在catch块中?或者,有更好的设计模式吗?提前感谢任何意见/提示.

public String MyFunction() throws Exception {     

    Connection conn;
    CallableStatement cs;

  try {

      Context context = new InitialContext();
      DataSource ds = (DataSource)context.lookup("jdbc/MyPool");
      conn = ds.getConnection();        

      cs = conn.prepareCall( "{call my_sproc (?)}" );

      cs.registerOutParameter(1, Types.VARCHAR);

      cs.execute();

      String outParam = cs.getString(1); 

      if ( conn != null )  // close connection
         conn.close();

  } catch (Exception e) {
      outParam = "an error occurred";
  }
    return outparam;
}
Run Code Online (Sandbox Code Playgroud)

java database oracle jdbc

8
推荐指数
1
解决办法
3万
查看次数

JDBC垃圾回收

如果我不关闭结果集或预备语句会发生什么.

它们是否会被垃圾收集器关闭并释放.

我问这个函数内部的局部变量.

你知道关于这个的任何文件吗?

java garbage-collection jdbc

3
推荐指数
1
解决办法
4193
查看次数

在Java SQL中自动关闭结果集

请考虑以下代码

ResultSet rs = null;
Statement st = null;
try {
  //do somehting
 } catch (Exception e){
  //do something
 } finally {
     if(st != null){
       try {
       st.close();
       } catch (SQLException e) {
            log.error("Exception while closing statement: " + e);
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

问题是当我们关闭语句时,它是否会关闭结果集,或者我们是否需要显式关闭结果集

if(rs != null){
   try {
   rs.close();
   } catch (SQLException e) {
        log.error("Exception while closing result set: " + e);
   }
}
Run Code Online (Sandbox Code Playgroud)

我认为关闭语句将自动关闭结果集,但如果我没有显式关闭结果集,则FindBugs会抛出以下警告

此方法可能无法清除java.sql.ResultSet

java sql jdbc

3
推荐指数
1
解决办法
3294
查看次数

标签 统计

java ×5

jdbc ×5

database ×2

sql ×2

cursor ×1

garbage-collection ×1

oracle ×1