代码如下:
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
<p>我去官网下载JDBC6.0就会出这个错误,去其他地方下载JDCB4.0就不会出这个错误,我的数据库用的是2008版本,不知道和这个有没有关系。请大神指引迷津,感谢!</p>
<p>微软的驱动太麻烦啦。</p>
一个开源的驱动就搞定SQL Server 2000、2005、2008、2012啦,那就是#jTDS#!
回复 <a class="referer" target="_blank">@Dxxd</a> : ClassNotFoundException ,微软的JDBC驱动比较麻烦,jTDS 适应的版本更强一点。
那这么说就是JDBC的问题咯,感谢啦~
换jtds驱动吧
<p>jtds已经多年没有更新了,目前不建议使用。早年是微软JDBC太糟,才很多人使用这个,现在微软的驱动还是及格线以上的。而且注意你的错误 java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverte</p>
4.0没问题,很大可能是因为没有引用javax.xml.bind下面的类而已。你的JDK是9.0,请注意9.0的模块化功能会引发和JDK8的很多不兼容。需要添加VM运行参数 --add-modules java.se.ee(很多人都在JDK9上遇到了找不到DatatypeConverte问题,其实你从DatatypeConverte找不到入手搜索,很多相关信息呢。)
<p>JDK9作为过渡版本,即将被淘汰,所以稍微稳定点开发,还是以JDK8为主比较好,目前JDK8是长期支持版本,9只能说是个新特性试用品罢了。</p>
哦哦,原来是这样,谢谢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。