- 博客(0)
- 资源 (1)
- 收藏
- 关注
SQL Server jdbc.jar
SQL Server 2005 驱动包
已知问题
------------
以下为有关 Microsoft SQL Server 2005 JDBC 驱动程序的已知问题:
1) 与 SQL SERVER 2000 JDBC 驱动程序的驱动程序加载冲突
若在同一进程中加载 Microsoft SQL Server 2000 JDBC 驱动程序和
Microsoft SQL Server 2005 JDBC 驱动程序,则在某些情况下,
JDBC 驱动程序的 2000 版本将错误地接受用于 JDBC 驱动程序的
2005 版本的 DriverManager.getConnection 方法调用。
该问题的原因是:若先加载 JDBC 驱动程序的 2000 版本,
则该程序将错误地接受“jdbc:sqlserver://”URL 前缀。
Microsoft 已意识到该问题,并计划在 JDBC 驱动程序的 2000 版本
中解决该问题。
要解决该问题,请先加载 JDBC 驱动程序类的 2005 版本,如下所示:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 版本
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 版本
这将确保“jdbc:sqlserver://”URL 前缀由
JDBC 驱动程序的 2005 版本处理,而“jdbc:microsoft:sqlserver://”
URL 前缀将由 JDBC 驱动程序的 2000 版本处理。
2) 为预定义语句获取参数元数据时的限制
将 SQLServerParameterMetaData 类与预定义语句一起使用时有一些
限制。SQL INSERT 语句需要可选的 INTO 子句,而 SQL DELETE 语句
需要可选的 FROM 子句,以便正确地获取参数元数据。
3) SQL SERVER 2000 数据转换限制
将 SQL Server 2000 与 JDBC 驱动程序一起使用时,存在以下数据
转换限制:
- 字符串数据不能转换为基础 money 或 smallmoney 列。
- 长度大于 4000 个字符的字符串数据不能转换为 char
或 varchar 基础列。
- 如果 sendStringParametersAsUnicode 连接字符串属性设置
为 false,或调用了 setAsciiStream 方法,则长度大于
4000 个字符的字符串数据不能转换为 nchar 或 nvarchar 基础列。
- 如果 sendStringParametersAsUnicode 连接字符串属性设置
为 true,则字符串数据不能转换为文本列。
如果需要支持字符串到文本列的转换,
请将 sendStringParametersAsUnicode 属性设置为 false。
4) 命名参数限制
名称中包含左括号“[”的存储过程不支持命名参数。例如,类似于
“stor[edProc”的名称。
注意,这并不影响使用“[]”的存储过程名称的正常转义。
5) 触发和更新计数
执行时激发一个或多个触发的预定义语句或可调用语句可能会返回
错误的更新计数。当 lastUpdateCount 连接属性设置为 true
(默认设置)时,会出现这种情况。如果任一激发的触发生成了自身
的更新计数,并且未使用 SET 语句,则将返回第一个此类触发的更新
计数,而不是语句执行的更新计数。当存储过程调用作为正常语句执行
时也会存在同样的问题。
要解决该问题,可以通过发布以下 Transact-SQL 语句,将 SQL Server
配置为不返回触发执行的更新计数:
USE master;
GO
EXEC sp_configure 'disallow results from triggers', '1';
RECONFIGURE WITH OVERRIDE;
注意,如果您不需要预定义语句执行或可调用语句执行,则可以通过使用
常规语句对象(而不是 PreparedStatement 或 CallableStatement 对象)
来避免此问题。
2008-11-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人