无法在Eclipse IDE中使用Java建立与SQL Server 2008的数据库连接

时间:2012-09-05 13:51:23

标签: java eclipse sql-server-2008

我正在尝试使用Eclipse IDE中的Java代码连接到HP Operations Manager数据库。 我能够通过Microsoft SQL Server Management Studio 2008成功连接,但它通过代码失败。 我安装了“Microsoft JDBC Driver 4.0 for SQL Server”

代码:

import java.sql.*;

public class ConnectDatabase {

    Connection dbConnection = null;

    String dbName = "openview";
    String serverip="10.105.219.102";
    String serverport="1433";
    String url = "jdbc:sqlserver://"+serverip+"\\OVOPS;databaseName="+dbName+"";
    String userName = "HPOM-QA-WIN\\Administrator"; 
    String password = "Nbv12345";
    final String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    Statement statement = null;
    ResultSet rs = null;
    int updateQuery = 0;

    public Connection getConnection() {

        System.out.println(url);
        try{
             Class.forName(driverName).newInstance();

             dbConnection = DriverManager.getConnection(url,userName,password);
             System.out.println(DriverManager.getDrivers());

             statement = dbConnection.createStatement();

             String QueryString = "select Id from openview.dbo.OV_MS_Message where OriginalServiceId like '{FaultDn[1]}'";

             updateQuery = statement.executeUpdate(QueryString);

             if(updateQuery!=0){
                System.out.println("success" + updateQuery);
             }
             statement.close();
             dbConnection.close();
          }catch (Exception e){
              e.printStackTrace();
         }
         return dbConnection;

     }

     public static void main(String[] args) {

        ConnectDatabase cDB = new  ConnectDatabase();
        cDB.getConnection();

    }

 }

执行此代码时出现以下错误:

jdbc:sqlserver://10.105.219.102\OVOPS;databaseName=openview com.microsoft.sqlserver.jdbc.SQLServerException: The connection to the host 10.105.219.102, named instance ovops failed. Error: "java.net.SocketTimeoutException: Receive timed out". Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434.  For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.getInstancePort(SQLServerConnection.java:3589)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.primaryPermissionCheck(SQLServerConnection.java:1225)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:972)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.ucs.test.ConnectDatabase.getConnection(ConnectDatabase.java:27)
    at com.ucs.test.ConnectDatabase.main(ConnectDatabase.java:51)

当我将网址更改为

String url = "jdbc:sqlserver://"+serverip+"\\OVOPS:"+serverport+";databaseName="+dbName+"";

我收到以下错误:

jdbc:sqlserver://10.105.219.102\OVOPS:1433;databaseName=openview com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'HPOM-QA-WIN\Administrator'. ClientConnectionId:f1d323b7-9998-418c-b2a2-f2a7bd7b9b04
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.ucs.test.ConnectDatabase.getConnection(ConnectDatabase.java:27)
    at com.ucs.test.ConnectDatabase.main(ConnectDatabase.java:51)

我在Windows防火墙中明确添加了入站规则以允许1434端口上的UPD流量,然后禁用防火墙。但我仍然得到这个错误。 此处提供的凭据用于使用Microsoft SQL Server Management Studio进行连接,并且它可以正常工作。但它通过代码失败了。

我不确定我哪里出错了。我无法通过代码建立成功的连接。请帮帮我。

5 个答案:

答案 0 :(得分:3)

嘿谢谢大家的回复。最后我能够解决这个问题。问题在于url和auth dll。将网址更改为

"jdbc:sqlserver://10.105.219.102:1433;instance=OVOPS;DatabaseName=openview;integratedSecurity=true" 

并在java.library.path中添加了“sqljdbc_auth.dll”的位置。有效!

再次感谢您为我提供的帮助:)

答案 1 :(得分:2)

我花了一段时间来解决这个问题,但你必须进入SQL Server配置管理器应用程序。加载后,展开[SQL Native Client 11.0配置]>客户端协议。

启用所有三个(共享内存,TCP / IP和命名管道)(如果尚未启用)。 然后单击TCP / IP并确保默认端口为1433。

如果安装了32位系统或SQL Server版本,请在SQL Native Client 11.0配置(32it)菜单中执行相同操作,启用共享内存,TCP / IP和命名管道,并将默认端口设置为1433。

然后单击打开[SQL Server网络配置]或(如果适用,则为32位),并选择[YOURSERVERNAME的协议]。 再次确保已启用共享内存,TCP / IP和命名管道。

然后单击[TCP / IP]协议名称,然后选择新弹出窗口顶部的[IP地址]选项卡。对于IP1,确保Active为YES;启用为YES(默认情况下为“否”,即使它处于“活动状态”);并将TCP端口设置为1433(tbh我不知道你是否必须执行此步骤,但我做了并且它工作了!!);我的TCP动态端口设置为0,我没有更改任何IP地址;

我为IP10做了同样的事情,IP10:127.0.0.1,这是本地机器。 我还向下滚动到页面底部,并将IPAll TCP Ports设置为1433(动态端口为49163)。 然后,您需要应用所有更改,关闭属性窗口,然后单击SQL Server配置管理器中的SQL Server服务,并重新启动所有正在运行的服务器。 这应该这样做:D

答案 2 :(得分:1)

Catch示例:

    String url = "jdbc:sqlserver://localhost:1433/databaseName";
    String username = "user";
    String password = "pass";

Connection connection = DriverManager.getConnection(url, username, password);

1433是默认端口。 不要在网址中使用'\'。

答案 3 :(得分:0)

这可能不是您问题的答案,但我希望这会对您有所帮助。以下是如何正确返回连接(mysql)的方法:

import java.sql.*;

public class ConnectToDatabase{


    public Connection getConn(){

        final String DBPATH="jdbc:mysql://localhost:3306/mydb";
        final String DBUSER="root";
        final  String DBPASS="";
        Connection conn=null;
        try {
             conn = DriverManager.getConnection(DBPATH,DBUSER,DBPASS);

        } catch (SQLException e) {

            e.printStackTrace();
        }
    return conn;
    }

}

答案 4 :(得分:0)

尝试更改数据库用户密码。确保新密码没有特殊字符。 我遇到了同样的问题,并在更改db密码后得到了解决。 我的解决方法的步骤:

  
    

我收到了sqlserverexception.java 190错误,指出无法连接到主机端口:4500这是我的localhost端口。     打开的Sql Server配置管理器 - > SQL Server网络配置 - > MSSQLSERVER的协议 - >启用TCP / IP。     检查TCP端口号。这是1433.所以我在我的注册表文件中将4500更改为1433。

  

完成上述步骤后,我的db用户(sql-test)的startpassword错误,我得到了一个不同的错误。我将密码更改为sqltest123并且有效。