【发布时间】: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 文件,并希望能够在其他人的计算机上运行它并让它访问数据库并返回记录。
我尝试了here 和here 的指示,但没有任何运气。我查看了在我的 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;
现在它可以在连接到同一网络的任何计算机上完美运行,但即使我连接到不同的网络,我也需要它工作。
我真的需要一个指针。
【问题讨论】: