2014-11-24 33 views
1

我有以下Java 7代码来创建CachedRowSet来自CachedRowSet的连接

CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet(); 

有没有办法从CachedRowSet对象中获取Connection对象?在调用CachedRowSet上的acceptChanges()之前,我想在连接对象上设置autoCommit为false,因为调用acceptChanges()时出现以下异常。

有上CachedRowSet一个COMMIT_ON_ACCEPT_CHANGES领域,但它已过时。

回答

2

嗯,我花了一些时间来重现这个问题。通过conn.setAutoCommit(false);ConnectionautoCommit值设置为false可以解决此问题。

下面是示例工作程序:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import javax.sql.rowset.CachedRowSet; 
import javax.sql.rowset.RowSetProvider; 

public class CRSetChecker {  
    public static void main(String[] args) {  
     String connectString = "jdbc:oracle:thin:scott/tiger" + 
       "@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)" + 
       "(HOST=myorahost)(PORT=5521))" + 
       "(CONNECT_DATA=(SID=myorasid)))"; 

     //Get DB connection 
     Connection conn = (new CRSet()).getConnection(connectString); 
     if (conn == null) { 
      System.out.println("Connection failed"); 

      System.exit(0); 
     } else { 
      System.out.println("Connection established successfully!"); 

      try { 
       CachedRowSet crs = 
           RowSetProvider.newFactory().createCachedRowSet(); 
       String query="select ename from emp"; 
       crs.setCommand(query); 
       crs.execute(conn); 
       //Set auto commit false 
       conn.setAutoCommit(false); 
       int count = 0; 
       while(crs.next()){ 
        String name = crs.getString(1); 
        count++;       
        System.out.println(name); 
        if(count==1){      
         crs.updateString(1, "COOPER"); 
         crs.updateRow(); 
         crs.acceptChanges(conn); 
         System.out.println("After update:"+crs.getString(1)); 
        } 
       } 
       conn.close(); 
      } catch (SQLException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } 

    public Connection getConnection(String connectString) 
     { 
     Connection con = null; 
     try { 
      try { 
      Class.forName("oracle.jdbc.OracleDriver"); 
      } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      } 

      con = DriverManager.getConnection(connectString); 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } 

     return con; 
     } 
} 
+0

谢谢,它的工作。 – user2953113 2014-11-24 13:29:47