如何使用MS JDBC驱动程序与MS SQL Server 2008 Express?

13

我的配置:

  • windows XP SP3
  • JDBC 2005
  • MS SQL Server 2008 Express,通过tcp/ip端口1433公开
  • class path中有sqljdbc.jar

我尝试过:

try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433/SQLEXPRESS2008;databaseName=Test;selectMethod=cursor", "sa", "");
}
catch (Exception e) {
    e.printStackTrace();
}

但它总是抛出一个异常:

java.sql.SQLException: No suitable driver

我也尝试了以下网址:

localhost:1433/SQLEXPRESS2008

localhost/SQLEXPRESS2008

localhost

同样的结果。需要帮助吗?

6个回答

29

您输入的 URL 不正确。

我不知道“JDBC 2005”是什么意思。当我在微软网站上查看时,我找到了一个叫做Microsoft SQL Server JDBC Driver 2.0的东西。您可能需要这个 - 它包含了很多修复和一些性能改进。 [编辑:您可能需要最新的驱动程序。截至2012年3月,来自 Microsoft 的最新 JDBC 驱动程序是 JDBC 4.0]

请查看发布说明。对于此驱动程序,您需要:

URL:  jdbc:sqlserver://server:port;DatabaseName=dbname
Class name: com.microsoft.sqlserver.jdbc.SQLServerDriver

看起来你的类名没错,但 URL 是错误的。

微软在发布 JDBC 驱动程序后更改了类名和 URL。你正在使用的 URL 适用于 Microsoft 最初发布的 JDBC 驱动程序,MS 称其为“SQL Server 2000 版本”。但是该驱动程序使用不同的类名。

对于所有随后的驱动程序,URL 更改为这里所示的形式。

这在 JDBC 驱动程序的发行说明中有说明。


2
是的,这个答案中的信息现在已经过时了。我建议开发人员去微软网站获取最新的驱动程序。同时阅读发布说明以验证类名和URL。目前它们没有改变,但检查一下是有意义的。 - Cheeso

3
如果你的databaseName值是正确的,那么请使用以下代码:DriverManager.getconnection("jdbc:sqlserver://ServerIp:1433;user=myuser;password=mypassword;databaseName=databaseName;")

1
添加 microsoft: 后,我得到了以下错误信息:java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver:// ... - Baumann

3
  1. Download the latest JDBC Driver (i.e. sqljdbc4.0) from Microsoft's web site
  2. Write the program as follows:

    import java.sql.*;
    class testmssql
    {
        public static void main(String args[]) throws Exception
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection      con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;
                    databaseName=chapter16","sa","123");//repalce your databse name and user name
                Statement st=con.createStatement();
            ResultSet rs=st.executeQuery("Select * from login");//replace your table name
            while(rs.next())
            {
                String s1=rs.getString(1);
                String s2=rs.getString(2);
                System.out.println("UserID:"+s1+"Password:"+s2);
            }
            con.close();
        } 
    }
    
  3. Compile the program and set the jar classpath viz: set classpath=C:\jdbc\sqljdbc4.jar;.; If you have saved your jar file in C:\jdbc after downloading and extracting.

  4. Run the program and make sure your TCP/IP service is enabled. If not enabled, then follow these steps:
    1. Go to Start -> All Programs -> Microsoft SQL Server 2008 -> Configuration tools -> SQL Server Configuration Manager
    2. Expand Sql Server Network Configuration: choose your MS SQL Server Instance viz. MSQSLSERVER and enable TCP/IP.
    3. Restart your MS SQL Server Instance. This can be done also from the right click menu of Microsoft SQL Server Management Studio at the root level of your MS SQL server instance

0

命名实例?

URL:jdbc:sqlserver://[服务器名称][\实例名称][:端口号][;属性=值]

注意:反斜杠


0

最新的JDBC MSSQL连接驱动程序可以在JDBC 4.0上找到。

类文件应该在类路径中。如果您正在使用Eclipse,您可以通过以下方式轻松完成相同的操作-->

右键单击项目名称-->属性-->Java Build Path--> 库-->添加外部JAR

同时,正如@Cheeso所指出的那样,访问的正确方式是jdbc:sqlserver://server:port;DatabaseName=dbname

与此同时,请查找一个用于访问MSSQL DB(在我的情况下为2008)的示例类。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ConnectMSSQLServer
{
   public void dbConnect(String db_connect_string,
            String db_userid,
            String db_password)
   {
      try {
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         Connection conn = DriverManager.getConnection(db_connect_string,
                  db_userid, db_password);
         System.out.println("connected");
         Statement statement = conn.createStatement();
         String queryString = "select * from SampleTable";
         ResultSet rs = statement.executeQuery(queryString);
         while (rs.next()) {
            System.out.println(rs.getString(1));
         }
         conn.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args)
   {
      ConnectMSSQLServer connServer = new ConnectMSSQLServer();
      connServer.dbConnect("jdbc:sqlserver://xx.xx.xx.xxxx:1433;databaseName=MyDBName", "DB_USER","DB_PASSWORD");
   }
}

希望这能有所帮助。

-2
您可以尝试以下方法,这在我的情况下运行良好:
  1. 下载当前的jTDS JDBC Driver
  2. 将jtds-x.x.x.jar放入您的类路径中。
  3. 将ntlmauth.dll复制到windows/system32。根据您的硬件选择dll x86、x64等。
  4. 连接URL为:'jdbc:jtds:sqlserver://localhost:1433/YourDB',您不必提供用户名和密码。
希望这有所帮助。

2
他们在问如何使用MS驱动程序,而不是JTDS驱动程序。抱歉(-1)。 - javamonkey79
问题并没有明确说明他必须使用MS驱动程序。也许提问者不知道jTDS。通常情况下,jTDS被认为是更好的选择,因此这可能不是一个直接的解决方案,但是是一个很好的替代方案。 - Adrian
谢谢你们给一个七年前的回答点踩。你们真是冠军。 - raupach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接