【问题标题】:Using JDBC to access localhost database from any computer使用 JDBC 从任何计算机访问 localhost 数据库
【发布时间】:2016-06-11 09:49:06
【问题描述】:

首先,如果这以任何方式重复,我深表歉意,但我已经尝试了几个小时从这个站点尝试许多不同的东西,但没有运气。郑重声明,我运行的是 OS X 10.11.5。

我使用 JDBC 制作了这个简单的应用程序,以连接到我创建的存储在本地主机上的数据库(我正在使用 phpMyAdmin,如果有帮助的话):

@Override
public void actionPerformed(ActionEvent e) {

// The ID to search for
int search = Integer.parseInt(textField.getText());
// Setting up the connection to the database.
    String url = "jdbc:mysql://my_ip_address:3306/javaDatabase";
    String user = "root"; // root user
    String password = ""; // no password
    Connection con = null; 
    PreparedStatement searchID; // I used a prepared statement so I could include user input
    ResultSet result = null; // results after SQL execution

    try {
        con = DriverManager.getConnection(url, user, password); // connect to MySQL
        // Creating the prepared statement
        searchID = con.prepareStatement("SELECT * FROM Names WHERE ID = ?");
        // Setting the parameter to the user input
        searchID.setInt(1, search);
        result = searchID.executeQuery(); // execute the SQL query

        while (result.next()) { // loop until the end of the results

            String ID = result.getString("ID");
            String FirstName = result.getString("FirstName");
            String LastName = result.getString("LastName");

            textArea1.setText("ID: " + ID + "\n" + 
            "First Name: " + FirstName + "\n" +
            "Last Name: " + LastName + "\n");
        }
    } catch(SQLException e1) {
        System.out.println("Exception caught " + e1.getMessage());
    } finally {
        try {
            if (result != null) {
                result.close();
            }

            if (con != null) {
                con.close();
            }
        } catch(SQLException e2) {
            System.out.println("SQLException caught " + e2.getMessage());
        }
    }
} 

public static void main(String[] args) {

    JavaWithSQL newJava = new JavaWithSQL();

}

现在,我将这个应用程序打包为一个可执行的 .JAR 文件,并希望能够在其他人的计算机上运行它并让它访问数据库并返回记录。

我尝试了herehere 的指示,但没有任何运气。我查看了在我的 Mac 上打开端口 3306,但我的防火墙已关闭,但这似乎不是问题。我还尝试使用以下方法对相关数据库使用 GRANT 权限:

GRANT ALL PRIVILEGES ON javaDatabase.* TO '%'@'%' IDENTIFIED BY '';

无济于事。但是,当我明确写入计算机 IP 地址时,它确实在其他计算机上工作,如下所示:

GRANT ALL PRIVILEGES ON javaDatabase.* TO 'root'@'other_computer_ip' IDENTIFIED BY '';

但我需要能够在我讲师的计算机上运行它,理论上,在其他人的计算机上运行它,而不必知道每个人的 IP 地址。

我该怎么做?我错过了什么吗?

编辑:

好的,我已经运行了命令

GRANT SELECT ON javaDatabase.* TO 'remoteUser'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;

现在它可以在连接到同一网络的任何计算机上完美运行,但即使我连接到不同的网络,我也需要它工作。

我真的需要一个指针。

【问题讨论】:

    标签: mysql database jdbc


    【解决方案1】:

    您正在使用TO '%'@'%' IDENTIFIED BY '';

    我不确定这是否有效。在您的情况下,它应该针对 root 用户。

    GRANT ALL PRIVILEGES ON javaDatabase.* TO 'root'@'%' IDENTIFIED BY '';

    【讨论】:

    • 我也试过了。我在 IDENTIFIED BY 中留了一个空白,因为 root 目前没有密码。
    • 我不是指密码。它的用户名部分让我感到困惑...... '%'@'%' 对我来说听起来不对
    • 您的第二个查询使用 root 作为用户名 .. 这就是它在这种情况下工作的原因。
    • 嗯。这是我在 SO 其他地方看到并尝试过的查询。我将尝试第二个查询...
    • 啊哈!成功了,谢谢!我使用了您的最后一个查询,然后重新启动了服务器,它可以在我家的两台不同的计算机上运行,​​我什至更改了其中一台的 IP 地址,只是为了检查。非常感谢!
    猜你喜欢
    • 2014-09-07
    • 2023-03-30
    • 2015-02-10
    • 2019-01-03
    • 1970-01-01
    • 2012-06-09
    • 2017-03-08
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多