使用JDBC从任何计算机访问localhost数据库

时间:2016-06-11 09:49:06

标签: mysql database jdbc

首先,我道歉,如果这是一个重复的任何方式,但我已经尝试了很多不同的东西从这个网站几个小时,现在没有运气。为了记录,我正在运行OS X 10.11.5。

我使用JDBC创建了这个简单的应用程序来连接到我创建的数据库,该数据库存储在我的localhost上(我使用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;

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

我真的需要一个指针。

1 个答案:

答案 0 :(得分:0)

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

我不确定这是否有效。它应该针对您的案例中的root用户。

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