关于JDBC连接SQL 2008的一些问题?
代码如下:
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 FilesJavajdk-9.0.1binjava" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2017.2.5libidea_rt.jar=11045:C:Program FilesJetBrainsIntelliJ IDEA 2017.2.5bin" -Dfile.encoding=UTF-8 -classpath "D:IprojectTestWebwebWEB-INFclasses;D:JAVAapache-tomcat-9.0.2libservlet-api.jar;E:SQLjdbcMicrosoft JDBC Driver 6.0 for SQL Serversqljdbc_6.0chsjre8sqljdbc42.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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
哦哦,原来是这样,谢谢。
JDK9作为过渡版本,即将被淘汰,所以稍微稳定点开发,还是以JDK8为主比较好,目前JDK8是长期支持版本,9只能说是个新特性试用品罢了。
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找不到入手搜索,很多相关信息呢。)
换jtds驱动吧
那这么说就是JDBC的问题咯,感谢啦~
回复
ClassNotFoundException ,微软的JDBC驱动比较麻烦,jTDS 适应的版本更强一点。
微软的驱动太麻烦啦。
一个开源的驱动就搞定SQL Server 2000、2005、2008、2012啦,那就是#jTDS#!
我去官网下载JDBC6.0就会出这个错误,去其他地方下载JDCB4.0就不会出这个错误,我的数据库用的是2008版本,不知道和这个有没有关系。请大神指引迷津,感谢!