`

IBATIS 配置报错。解决Can't start a cloned connection while in manual transaction mode问题

阅读更多
实际上你如果在IBATIS入门(第一节)不仔细看我的conn.properties的配置的话,你不会察觉到。

#sql200

user=sa
pwd=sa
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;databasename=ibatisetest
如果你这样写,看似没有任何错误,但是他会爆出一下这个错误。
com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/dk/user/User.xml.
--- The error occurred while applying a result map.
--- Check the selectUser-AutoResultMap.
--- The error happened while setting a property on the result object.
--- Cause: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.
怎么办呢?
数据库连接串加上SelectMethod=cursor
向这样
jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;databasename=ibatisetest
就可以解决了。
解释一下:
SelectMethod=cursor
作用:以利用服务器端的游标加快速度
使用情况:
1.执行多个Statements的操作的时候用
2.需要手动使用事务的时候使用
一下是转载的:【转】:http://looxiaohu.iteye.com/blog/235840
以上是在使用sqlserver数据库的连接字符串的时候使用过。
例如:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=071008_03;SelectMethod=cursor
但是今天我将其用在oracle数据库的时候,却报出了一下的错误信息:
Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169869824)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
这是个老话题,2002年在使用ejb的bmp就遇到了这个问题
连接数据库成功之后,想在一个事务中初始化多个预处理句柄时报错
dbConn.setAutoCommit(false)
for (int i = 0; i < 5; i++) {
pstmt[i] = dbConn.prepareStatement(strPreSQL[i]);
错误提示:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start manual transaction mode because there are cloned connections

怀疑MS SQL不能在一个事务中建多个预处理句柄
Resolution:
You have to add a property to the pool definition, something to do with selectMode=cursor or selectMethod=cursor. Check the driver documentation. Otherwise the driver will not allow more than one statement per connection at any given time
微软的专家告诉的
This error occurs when you try to execute multiple statements against a SQL Server database with the JDBC driver while in manual transaction mode (AutoCommit=false) and while using the direct (SelectMethod=direct) mode. Direct mode is the default mode for the driver."
这段翻译:
这是个老话题,2002年在使用ejb的bmp就遇到了这个问题
连接数据库成功之后,想在一个事务中初始化多个预处理句柄时报错
dbConn.setAutoCommit(假)
为(int i = 0;我<5;我+ +)(
pstmt的[我] = dbConn.prepareStatement(strPreSQL [我]);
错误提示:
java.sql.SQLException:[微软] [SQLSERVER的2000年为JDBC]驱动程序不能启动手动交易模式,因为有克隆连接

怀疑MS SQL不能在一个事务中建多个预处理句柄
决议:
你必须添加一个属性到池中的定义,是与selectMode的SelectMethod = =光标或光标。 检查驱动程序文件。 否则,驱动程序将不允许超过每一个声明在任何特定时间连接
微软的专家告诉的
此错误发生在您尝试执行一个SQL Server与反对的JDBC驱动程序数据库多条语句,而在手动交易模式(自动提交= false)并且使用直接(SelectMethod =直接)模式。 直接模式是该驱动程序的默认模式。


import java.sql.*;
import java.io.*;

public class Repro{

public static void main(String args[])
{
try {
Connection con;
Statement s1 = null;
ResultSet r1 = null;
Statement s2 = null;
ResultSet r2 = null;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;SelectMethod=Direct;User=User;Password=Password");
//fix 1
//"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;SelectMethod=Cursor;User=User;Password=Password");
con.setAutoCommit(false);

try {
s1 = con.createStatement();
r1 = s1.executeQuery("SELECT * FROM authors");

//fix 2
//r1.close();
//s1.close();

s2 = con.createStatement();
r2 = s2.executeQuery("SELECT * FROM publishers");
}
catch (SQLException ex)
{
System.out.println(ex);
}

}
catch (Exception e)
{
e.printStackTrace();
}
}
}
用SQL Server驱动一次select很多数据最好在connection string中加上SelectMethod=Cursor,以利用服务器端游标加快速度,其实不只sqlserver,oracle的jdbc,只要使用PreparedStatement,驱动默认就使用游标,sqlserver则不然,必须使用SelectMethod=Cursor才打开游标。
这点在使用jotm时,并且使用Xapool时,必须修改DataSourceFactory,把PreparedStatementPool禁掉,否则记录插的太快了,很可能是游标没来得及关闭
即使不使用jotm,大量向oracle插入数据,例如每毫秒1条,也会引发游标用完,所以大量插入数据时,应该使用oracle的批处理batchupdate.
可惜的是,微软的sqlserver的jdbc驱动不支持这个属性


分享到:
评论

相关推荐

    ibatis 配置文件详解

    ### ibatis配置文件详解 #### 一、ibatis概述 ibatis,又称MyBatis,是一种优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。ibatis可以...

    常用ibatis配置

    标题中提到的“常用ibatis配置”指的是在使用iBatis这一数据持久层框架中,常见的配置用法和技术点。iBatis(现称为MyBatis)是一个流行的Java持久层框架,它通过使用XML或注解的方式,将SQL语句与对象进行映射,...

    ibatis用xml配置文件配置使用

    本篇文章将深入探讨如何使用XML配置文件来配置iBATIS,以解决你在实际开发中可能遇到的各种问题。 首先,我们了解iBATIS的核心概念——映射器(Mapper)。映射器是定义SQL语句的地方,而XML配置文件是映射器的主要...

    ibatis配置文件

    标题:“ibatis配置文件” 描述:“详细的ibatis配置文件,初来乍到,先打个招呼...” 在本文中,我们将深入探讨ibatis配置文件的关键组成部分及其如何影响ibatis框架的运行机制。ibatis(现在通常称为MyBatis)是...

    ibatis配置文件信息

    ### ibatis配置文件信息 #### 一、简介 在Java开发领域中,ibatis(现称为MyBatis)是一款优秀的持久层框架,它通过XML或注解的方式将接口方法与SQL语句绑定起来,实现对象关系映射(ORM)功能。ibatis的主要优势...

    ibatis配置文件、映射文件详解

    ### ibatis配置文件、映射文件详解 #### 1. SQL Map Config 文件详解 在ibatis框架中,`sqlMapConfig.xml`是一个非常重要的配置文件,它主要用于设置ibatis的全局配置信息,包括数据库连接信息、环境配置以及其它...

    IBatis.net 配置各种数据库

    《IBatis.net 配置各种数据库详解》 在软件开发中,数据库的连接与操作是不可或缺的一环。IBatis.net,作为一个轻量级的持久层框架,为开发者提供了灵活的数据映射功能,使得数据库操作变得更为简单。本文将详细...

    spring+ibatis配置实例

    在IT行业中,Spring框架与iBatis(现为MyBatis)是两个广泛使用的开源库,主要用于构建企业级Java应用程序。本实例将介绍如何将它们整合以实现数据访问层的操作。"spring+ibatis配置实例"这个项目提供了一个完整的...

    ibatis配置文件模板

    Ibatis,原名MyBatis,是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在Ibatis中,SQL是手写的,这使得开发者能够完全控制SQL的编写,避免了传统的对象关系映射工具所带来的性能损失。下面...

    Spring+ibatis 保留ibatis事务的配置

    根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...

    ibatis配置文件自动加载组件

    标题 "ibatis配置文件自动加载组件" 涉及的核心技术是MyBatis的自动配置加载功能,这在开发过程中极大地提高了效率,使得开发者无需每次修改XML映射文件后手动重启服务。MyBatis是一个优秀的Java持久层框架,它简化...

    ibatis相关配置

    Ibatis,全称为MyBatis,是一款开源的Java持久层框架,它允许开发者将SQL语句直接集成到Java代码中,避免了传统的JDBC代码编写,提高了开发效率和可维护性。Ibatis的核心功能包括映射器(Mapper)和SqlSession,通过...

    springMVC整合ibatis 配置详细

    在IT行业中,SpringMVC和iBatis是两个非常重要的框架,它们分别负责Web应用程序的控制层和数据访问层。SpringMVC以其优秀的模块化设计和强大的依赖注入机制,成为了Java开发中的主流MVC框架。而iBatis则是一个轻量级...

    ibatis的错误总结

    在深入探讨ibatis框架中可能遇到的错误时,我们首先需要理解ibatis(现被称为MyBatis)的基本概念。ibatis是一种优秀的持久层框架,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。ibatis可以使用...

    ibatis in action 中文版7ibatis in action 中文版7

    4. **社区支持**:作为一个成熟的开源项目,ibatis拥有庞大的用户群体和活跃的社区支持,这对于解决使用过程中遇到的问题非常有帮助。 ### 三、ibatis的应用场景 - **数据访问层的抽象**:ibatis可以作为数据访问...

    SPRING IBATIS 保留IBATIS事务的配置方式

    根据提供的文件信息,本文将详细解析Spring与iBatis整合时如何保留并使用iBatis事务管理机制,以及如何在应用程序中实现手动控制事务的方法。 ### Spring与iBatis整合 Spring框架是一个全面的企业级应用开发框架,...

    IBATIS_IN_ACTION

    - **最佳实践**:总结iBATIS使用过程中的常见问题及解决策略,分享成功经验。 - **综合应用**:通过实例演示iBATIS在复杂项目中的集成与应用,帮助读者将理论知识转化为实践能力。 ### iBATIS.NET QuickStart 除了...

    ibatis 实例 配置 源码

    ibatis 实例 配置 源码 依赖包 ibatis-2.3.4.726.jar commons-logging-api.jar commons-logging-1.1.jar commons-dbcp-1.2.2.jar commons-pool.jar

    Ibatis基本配置---[环境搭建

    Ibatis基本配置---[环境搭建

Global site tag (gtag.js) - Google Analytics