3

我正在尝试使用 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 进行连接,并且运行良好。但它通过代码失败了。

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

4

5 回答 5

3

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

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

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

再次感谢您为帮助我所做的努力:)

于 2012-09-07T05:53:12.957 回答
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 位,如果适用),并选择[Protocols for "YOURSERVERNAME"]。再次确保共享内存、TCP/IP 和命名管道都已启用。

然后单击 [TCP/IP] 协议名称,然后选择新弹出窗口顶部的 [IP 地址] 选项卡。对于 IP1,确保 Active 为 YES;Enabled 为 YES(默认为 No,即使是 Active);并将 TCP 端口设置为 1433(我不知道您是否必须执行此步骤,但我做了并且成功了!!);我的 TCP 动态端口设置为 0,我没有更改任何 IP 地址;

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

于 2014-10-20T20:14:56.767 回答
1

捕获示例:

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

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

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

于 2012-09-05T14:04:50.690 回答
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;
    }

}
于 2012-09-05T14:06:37.230 回答
0

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

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

执行上述步骤后,这次我的数据库用户(sql-test)的起始密码不正确,我得到了一个不同的错误。我将密码更改为 sqltest123 并且有效。

于 2013-09-07T03:42:42.410 回答