jdbc的异常抛出问题

weihong9308 2007-12-02 01:55:30
使用SQL2005的驱动连接MSSQL2005,如下
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";
运行一段错误的SQL,抛出的异常却是:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]略。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSLoginRequest.processReplyToken(Unknown Source)
.........


会有这种情况吗?谢谢
...全文
175 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanhuo010 2007-12-03
  • 打赏
  • 举报
回复
50419253 java高手群 一起探讨啊
weihong9308 2007-12-03
  • 打赏
  • 举报
回复
9楼

可以动态卸载吗?
battle2002 2007-12-03
  • 打赏
  • 举报
回复
没有加入数据库的用户名和密码
fanql_222 2007-12-03
  • 打赏
  • 举报
回复
com.microsoft.sqlserver.jdbc.SQLServerDriver是用来连接sqlserver的驱动,你是用来连接MSSQL的。
zhb_821012 2007-12-03
  • 打赏
  • 举报
回复
jdbc driver版本不一样
换成一样的就行了
天外流星 2007-12-03
  • 打赏
  • 举报
回复
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]
从错误信息可以看出你用的jdbc driver 是SQLServer 2000的,版本不一致.
所以把SQLServer 2000 jdbc driver先卸载,装上2005的driver.
weihong9308 2007-12-03
  • 打赏
  • 举报
回复
再提供一下线索:
如下两个都加载
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//SQL2000
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//SQL2005

con= DriverManager.getConnection(jdbc:sqlserver://localhost:1433;DatabaseName=tempdb");//SQL2005标准写法

是不是java把sql2005与sql2000的驱动做为一个SQL的驱动进行加载呢,后加载的无效,
我记得应该是根据URL来选择驱动的?


这有可能吗?
tiancao0401 2007-12-03
  • 打赏
  • 举报
回复
就是说闹
天外流星 2007-12-03
  • 打赏
  • 举报
回复
结贴,给分啊,
weihong9308 2007-12-03
  • 打赏
  • 举报
回复
谢谢各位,问题找到了,这是2000驱动的BUG

主要原因如下:

与 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 版本处理。




再帮我看看下面这个贴子
http://topic.csdn.net/u/20071202/14/b875aad5-5588-4779-bba1-7b2bd7a1c9e3.html
jojoy_828 2007-12-02
  • 打赏
  • 举报
回复
应该是驱动的问题,楼主你检查一下jar包,确认一下驱动jar包是否放入了WEB-INF/lib目录下和容器的lib目录下。
我没用过sqlserver2005,不知道是不是还要打补丁呢?sqlserver2000就要打补丁
koc104 2007-12-02
  • 打赏
  • 举报
回复
純編程文章網 http://www.KingOfCoder.com
tiancao0401 2007-12-02
  • 打赏
  • 举报
回复
肯定是驱动的问题:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]略
看2000???
weihong9308 2007-12-02
  • 打赏
  • 举报
回复
驱动应该是没有问题的,所以就觉得奇怪啊
cursor_wang 2007-12-02
  • 打赏
  • 举报
回复
你的数据库是SQL2005的吗?
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";
这个没有写错啊!
1楼写的是SQL2000的.你如果确定是SQL2005,那可能其他的有问题或驱动包放好了吗?
黑夜愁客 2007-12-02
  • 打赏
  • 举报
回复
安装了驱动了没有阿?
daniel_kaka 2007-12-02
  • 打赏
  • 举报
回复
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧