【问题标题】:Java issue within connection to Microsoft SQL Server与 Microsoft SQL Server 的连接中的 Java 问题
【发布时间】:2018-09-06 01:18:38
【问题描述】:

如何从我的 java 代码连接到 Microsoft SQL Server?

代码:

public class insert {

public static void main(String[] args) {
        try {

            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            String url = "jdbc:microsoft:sqlserver://LENOVO-PC\\SQLEXPRESS;DatabaseName=dbtest";
            Connection connection = DriverManager.getConnection(url , "sa" , "Aa123456");



            Statement st = connection.createStatement();
            st.executeUpdate("INSERT INTO [dbo].[table] VALUES ('come')");

        }
             catch (ClassNotFoundException e)
                {
                  e.printStackTrace();
                  System.exit(1);
                }
                catch (SQLException e)
                {
                  e.printStackTrace();
                  System.exit(2);
                }

}

     }

错误:

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at insert.main(insert.java:12)

Microsoft SQL Server 名称为:LENOVO-PC\SQLEXPRESS 并且 sqljdbc.jar 已经添加到引用的库中。

【问题讨论】:

  • 你的类路径中有驱动程序库吗?

标签: java sql-server jdbc


【解决方案1】:

您尝试加载的类名com.microsoft.jdbc.sqlserver.SQLServerDriver 来自Microsoft SQL Server 2000 驱动程序的一个非常旧的版本。 2005 年左右,Microsoft 将其更改为 com.microsoft.sqlserver.jdbc.SQLServerDriver(注意 jdbcsqlserver 之间的切换顺序)。当时他们还把驱动URL前缀从jdbc:microsoft:sqlserver:改成了jdbc:sqlserver:

换句话说,您需要:

  1. 使用Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")(可选,驱动会自动加载)
  2. 将您的网址更改为jdbc:sqlserver://LENOVO-PC\\SQLEXPRESS;databaseName=dbtest(注意前缀更改和DatabaseName -> databaseName。另请参阅Building the Connection URL

对于最近的 JDBC 驱动程序,没有必要在简单的 Java 应用程序中显式加载驱动程序类,因此您也可以删除 Class.forName 行来代替第 1 步。

还要确保您使用的是最新版本的驱动程序,请参阅mssql-jdbc project on GitHublatest stable version 在撰写本文时为 7.0.0)。

【讨论】:

  • ... 并且还使用驱动程序本身的current release
  • @GordThompson 是的,但 OP 提到他们正在使用 sqljdbc.jar 的事实表明他们至少使用了比 Microsoft SQL Server 2000 JDBC 驱动程序更新的版本(iirc 有 sqlserver.jar + 可能还有其他一些依赖项)。我在回答中添加了明确的提醒。
  • 我还按照以下步骤启用端口 1433:开始->所有程序-> Microsoft SQL Server 2012-> 配置工具-> 单击 SQL Server 配置管理器->展开 SQL Server 网络配置- > 协议 -> 启用 TCP/IP 右键框双击 TCP/IP 并转到 IP 地址 点击并将端口 1433 放在 TCP 端口下。
【解决方案2】:

更正驱动类名:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

【讨论】:

  • 这本身是不够的,URL 也是错误的。
猜你喜欢
  • 2014-08-04
  • 2014-07-10
  • 2020-04-23
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多