关于JDBC连接SQL 2008的一些问题?

Dxxd 发布于 2018/02/18 10:05
阅读 806
收藏 0

代码如下:

    

import java.sql.*;

public class ShowSql {
    public static void main(String[] args) {
        String url = "jdbc:sqlserver://localhost:1433;DatabaseName=hah";
        Connection conn=null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("loading success!");
            conn = DriverManager.getConnection(url,"sa","admin");
            System.out.println("conn success!");
            st = conn.createStatement();
            rs=st.executeQuery("select top 10 * from Group2");
            while(rs.next()){
                System.out.println(rs.getString("name"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

报错如下:

    

"C:\Program Files\Java\jdk-9.0.1\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.5\lib\idea_rt.jar=11045:C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.5\bin" -Dfile.encoding=UTF-8 -classpath "D:\Iproject\TestWeb\web\WEB-INF\classes;D:\JAVA\apache-tomcat-9.0.2\lib\servlet-api.jar;E:\SQL\jdbc\Microsoft JDBC Driver 6.0 for SQL Server\sqljdbc_6.0\chs\jre8\sqljdbc42.jar" ShowSql
loading success!
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4098)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3160)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
    at ShowSql.main(ShowSql.java:12)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 14 more

Process finished with exit code 1
 

加载中
0
Dxxd
Dxxd

我去官网下载JDBC6.0就会出这个错误,去其他地方下载JDCB4.0就不会出这个错误,我的数据库用的是2008版本,不知道和这个有没有关系。请大神指引迷津,感谢!

0
红薯官方
红薯官方

微软的驱动太麻烦啦。

一个开源的驱动就搞定SQL Server 2000、2005、2008、2012啦,那就是#jTDS#

红薯官方
红薯官方
回复 @Dxxd : ClassNotFoundException ,微软的JDBC驱动比较麻烦,jTDS 适应的版本更强一点。
Dxxd
Dxxd
那这么说就是JDBC的问题咯,感谢啦~
0
会哭的鳄鱼
会哭的鳄鱼
换jtds驱动吧
0
魔力猫
魔力猫

jtds已经多年没有更新了,目前不建议使用。早年是微软JDBC太糟,才很多人使用这个,现在微软的驱动还是及格线以上的。而且注意你的错误 java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverte

4.0没问题,很大可能是因为没有引用javax.xml.bind下面的类而已。你的JDK是9.0,请注意9.0的模块化功能会引发和JDK8的很多不兼容。需要添加VM运行参数 --add-modules java.se.ee(很多人都在JDK9上遇到了找不到DatatypeConverte问题,其实你从DatatypeConverte找不到入手搜索,很多相关信息呢。)

0
魔力猫
魔力猫

JDK9作为过渡版本,即将被淘汰,所以稍微稳定点开发,还是以JDK8为主比较好,目前JDK8是长期支持版本,9只能说是个新特性试用品罢了。

Dxxd
Dxxd
哦哦,原来是这样,谢谢。
返回顶部
顶部