您的位置:首页 > 其它

PRB:在手工事务模式下无法启动克隆的连接[注意]

2006-10-12 22:49 344 查看

症状

loadTOCNode(1, 'symptoms');
使用 Microsoft SQL Server 2000 JDBC 驱动程序时,您可能会遇到以下异常:

java.sql.SQLException:[Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.



回到顶端

原因

loadTOCNode(1, 'cause');
在手工事务模式 (AutoCommit=false) 下,如果使用直接 (SelectMethod=direct) 模式,当您尝试对使用 JDBC 驱动程序的 SQL Server 数据库执行多个语句时,将会出现此问题。直接模式是该驱动程序的默认模式。



回到顶端

解决方案

loadTOCNode(1, 'resolution');
当您使用手工事务模式时,必须将驱动程序的 SelectMethod 属性设置为 Cursor,或者确保您按照本文“更多信息”一节指定的方式在每个连接上只使用一个活动语句。



回到顶端

状态

loadTOCNode(1, 'status');
这种现象是设计导致的。



回到顶端

更多信息

loadTOCNode(1, 'moreinformation');

重现此问题的步骤

loadTOCNode(2, 'moreinformation');
使用以下代码重现此错误:

注意:请参见代码中的注释,以获取解决此问题所需的代码更改信息。
[code]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();
}
}
}

[/code]



回到顶端

参考

loadTOCNode(1, 'references');
有关克隆连接的更多信息,请参见 Microsoft SQL Server 2000 JDBC 驱动程序 HTML 帮助中的“连接字符串属性”部分或参见联机指南。有关使用该驱动程序的克隆连接的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
313220 (http://support.microsoft.com/kb/313220/) PRB:到 SQL Server JDBC 的意外连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: