将JAVA与SQLEXPRESS连接

时间:2012-09-03 15:39:53

标签: java sql jdbc

我没有使用SQL Express的经验。所以我会尝试提供我认为重要的所有细节 (它会使帖子有点长。但可能会有一些不必要的细节,请通过)

我最近安装了Microsoft SQL Server 2008(开始菜单中有2个项目为Microsoft SQL Server 2008Microsoft SQL Server 2008 R2

我需要与SQL Express数据库通信。实际上,我可以成功地做到这一点,我本地安装的数据库(我的This thread帮助我)。但我需要在办公室使用它。

这些计算机中安装了相同版本的SQL Express。但我无法在这些机器中使用我的JAVA程序,它会抛出这种异常。

com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
    at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
    at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
    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(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at JDBC_TEST.TEST.getData(TEST.java:57)
    at JDBC_TEST.TEST$1.actionPerformed(TEST.java:44)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

虽然我试了一整天来解决这个问题,但是找不到办法。但是我发现了一些东西,认为它与此有关。

这是我本地计算机SQL Server Configuration Manager的屏幕截图。

enter image description here

该程序在此条件下有效。所以我的程序似乎只使用MSSQLSERVER服务。

但是在我的办公室计算机上,虽然SQL Express版本是相同的(因为我使用相同的设置将其安装到我的计算机中)但我发现,这个 MSSQLSERVER服务不是可用那里。它仅显示了上述一些服务。 (SQL Server (SQLEXPRESS)SQL Server Browser和其他一些服务)

不幸的是,我无法更改办公室数据库的配置。所以我需要知道是否可以通过可用的SQLSERVER服务更改我的程序以与数据库进行通信。

以下是一个简单的(完整的)代码,用于演示我是如何尝试进行通信的。 (我正在使用Microsoft JDBC driver

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class TEST extends JFrame {

    JTextField stringField;
    JButton tryButton;

    public static void main(String[] args) {
        new TEST().start();
    }

    private void start() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationByPlatform(true);
        getContentPane().setLayout(new GridLayout(2, 0));
        stringField = new JTextField("jdbc:sqlserver://localhost:1433;user=root;password=123;");
        tryButton = new JButton("TRY");
        getContentPane().add(stringField);
        getContentPane().add(tryButton);
        pack();
        tryButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    ResultSet rSet = getData(stringField.getText());
                    rSet.first();
                    JOptionPane.showMessageDialog(tryButton, rSet.getString("username"), "DONE !", JOptionPane.INFORMATION_MESSAGE);
                    rSet.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        setVisible(true);
    }

    public static ResultSet getData(String URL) throws ClassNotFoundException, SQLException {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection CON = DriverManager.getConnection(URL);
        String query = "SELECT * FROM logindata;";
        Statement st = CON.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet RESULT = st.executeQuery(query);
        return RESULT;
    }
}

我写这个是为了尝试更改连接字符串..

希望有一些方法可以解决这个问题。任何帮助都非常感谢..
谢谢!

4 个答案:

答案 0 :(得分:7)

步骤

打开Sql Server配置管理器(开始 - >程序 - > Microsoft SQL Server 2008 - >配置工具)

展开SQL Server网络配置 - > [您的服务器实例]

双击TCP / IP

根据议定书:

确保已启用

在IP地址下:

滚动到底部并在IPAll下设置TCP端口(默认为1433)

找到要连接的IP地址,并将“已启用”和“活动”设置为“是”

答案 1 :(得分:1)

我认为错误消息包含了您的提示。你想连接远程机器吗?个人防火墙是在您的或远程计算机上运行?

如果两个问题的答案都是真的,请检查防火墙配置。我通常会尝试停止防火墙,然后,当一切正常时,添加例外规则并重新启动它。您可以参考防火墙事件日志来检查发生了什么。

答案 2 :(得分:0)

你需要去 Start > Microsoft SQL Server > Configuration Tools > SQL Server Configuration Manager

当它打开时转到

 SQL Server Configuration Manager > SQL Server Network Configuration > Protocols for SQLExpress 

在哪里可以找到协议TCP / IP,如果禁用则启用它单击TCP / IP,您将找到其属性。

在此属性中删除所有TCP动态端口并将值1433添加到所有TCP端口
并重新启动SQL Server Services > SQL Server

完成......

答案 3 :(得分:0)

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

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

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