2005-11-12

java.sql.SQLException:
I/O Error: SSO Failed: Native SSPI library not loaded.



在Java程序中,使用XML作为连接数据库的配置文件,使用JTDS作为驱动程序,使用dom4J读取XML配置文件,连接SQL Server时遇到的一个问题......

String buildDataBaseConnection()方法从XML文件中读取配置信息
return jdbc:jtds:sqlserver://localhost:1433;databaseName=master;sa,1234

Connection getConnection()方法进行数据库连接
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = java.sql.DriverManager.getConnection(buildDataBaseConnection());


程序报错:
Error: No active Connection
java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:603)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:335)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at dbTest.getConnection(dbTest.java:82)
at dbTest.displayDbProperties(dbTest.java:104)
at dbTest.main(dbTest.java:173)
Caused by: java.io.IOException: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.sendMSLoginPkt(TdsCore.java:1865)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:576)
... 8 more

这个
java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
是什么东西,有点晕了......

google了一下,发现中国的Java程序员就是厉害,似乎没有人遇到过这个问题,呵呵,也可能我的水平比较得初级......
至于SSPI Library是什么东西,不在本文讨论之列,有兴趣的朋友可以在MSDN找到介绍。

原来,DataBase的User和UserPass是要在
java.sql.DriverManager.getConnection();
之中定义的......

把上面的代码改成这样:
String buildDataBaseConnection()方法从XML文件中读取配置信息
return jdbc:jtds:sqlserver://localhost:1433;databaseName=master;

Connection getConnection()方法进行数据库连接
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = java.sql.DriverManager.getConnection(buildDataBaseConnection(),sa,1234);


这就没有问题了......
嗯,马上回去再看一遍JDK_5.0_doc里面的java.sql.DriverManager.getConnection()方法。

No comments: