java - 更新时executeBatch()锁定表

标签 java prepared-statement websphere-7

我正在使用preparedStatement和executebatch执行更新,如下所示:

query = "UPDATE BP_PROCESO SET " +
                "FILTROS = FILTROS||?, " +
                "COD_ETAPA_RECHAZO= ?," +
                "APROBADO=? " +
                "WHERE " +
                "NIU=? AND " +
                "COD_CAMPANIA = ?";
        ps = con.prepareStatement(query);


Iterator it = registros.entrySet().iterator();

while(it.hasNext()){

         int contador = 1;
            ps.setObject(contador++, cadenaFiltro);
            ps.setObject(contador++, etapaRechazo);
            ps.setObject(contador++, 0);
            ps.setObject(contador++, pojo.getNiu());
            ps.setObject(contador++, codigoCampania);
            ps.addBatch();
            if(respuesta %500==0){
                System.out.println(respuesta);
                ps.executeBatch();
                System.out.println("executed");
                ps.clearBatch();
            }
 }

第一次当 ps.executeBatch() 时表被锁定,但是我在 Apache Tomcat 中调试并且它没有被锁定,该应用程序安装在 Websphere 7.0.0.17 中,我通过 JNDI 获取连接

有人知道吗?

最佳答案

您是否在两个应用程序服务器中使用相同的事务隔离级别?如果您不确定,可以通过调用 con.getTransactionIsolation() 并比较该值来进行检查。大多数 JDBC 驱动程序都有默认值 java.sql.Connection.TRANSACTION_READ_COMMITTED (2),而 WebSphere Application Server 使用默认值 java.sql.Connection.TRANSACTION_REPEATABLE_READ (4)大多数数据库。事务隔离级别会影响数据库中执行的锁定操作,TRANSACTION_REPEATABLE_READ 通常涉及比 TRANSACTION_READ_COMMITTED 更严格的锁定。例如,要以编程方式更改事务隔离级别,您可以在获取连接后执行 con.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITED) 。请注意,您还可以通过 webSphereDefaultIsolationLevel 数据源自定义属性覆盖数据源级别的默认事务隔离级别。您还可以在用于获取数据源的资源引用的资源引用扩展上配置事务隔离级别。

以下技术说明包含有关 WebSphere Application Server 中事务隔离级别的附加信息,

http://www-01.ibm.com/support/docview.wss?uid=nas8N1012999

关于java - 更新时executeBatch()锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494475/

相关文章:

java - 将 EJB3 注入(inject)基于注释的 JSF2 支持 bean 导致 javax.naming.NameNotFoundException :

java - JNDI 查找时无法对 com.ibm.ws.naming.urlns.genericURLContextFactory 类型的对象调用方法 getObjectInstance

java - Spring JPA : How to run multi sql query in one round?

java - 如何在 Java 中自动填写 PDF 表单

java - 我们在哪里使用这个Constructor RemoteWebDriver(java.net.URL remoteAddress, CapativitydesiredCapabilties, Capativity requiredCapativity)

php - 有多个 OR 子句会减慢查询速度吗

php - 准备好的语句可能会导致内存泄漏?

persistence - websphere 7 和(基于应用程序的)open-jpa 2

Java Swing多线程访问JTextArea

mysql - 尝试使用带有 sql like 关键字的预准备语句但遇到问题