我在一台本地Linux机器上运行了一个MySQL服务器。我并没有遇到任何与它通信或通过简单的Java程序(在Eclipse中运行)使用MySQL Connector/J执行SQL语句的问题。
这是我的简单Java程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.lang.*;
public class main{
private static void request(){
String url = "jdbc:mysql://myadress:3306/mydatabase";
String user = "user";
String passwd = "passwd";
Connection conn = null;
try{
/* Initializing the connection */
conn = DriverManager.getConnection(url, user, passwd);
Statement statement = conn.createStatement();
ResultSet resultset = statement.executeQuery(/* MY SQL reqquest */);
while(resultset.next()){
System.out.println(resultset.getString(/* THE COLUMN AND ROW I WANTED IN MY REQUEST */));
}
}catch(SQLException e){
System.out.println("SQL connection error: " + e.getMessage());
}finally {
if(conn != null){
try{
/* CLosing connection */
conn.close();
}catch (SQLException e){
System.out.println("Error while closing the connection: " + e.getMessage());
}
}
}
}
public static void main(String[] args) {
try{ // Loading the MySQL Connector/J driver
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
System.out.println("Error while loading the Driver: " + e.getMessage());
}
request();
}
}
这段代码在Eclipse中运行良好,可以执行任意数量的SELECT和UPDATE SQL请求,没有任何问题。 当我尝试将此请求方法适应于我的MainActivity.java类时,我的安卓应用程序能够正确加载驱动程序,但无法与我的MySQL服务器通信,并返回错误。
如果我在上一个代码中输入本地IP地址到我的服务器并将我的安卓手机连接到Wi-Fi上,那么我的应用程序会返回:
"通讯链路失败。最后一次成功向服务器发送数据包是0毫秒前。驱动程序没有收到来自服务器的任何数据包。"
但是,如果我尝试在同样的先前代码中输入外部IP地址到我的服务器(不要担心,MySQL端口对Internet是开放的,我的服务器正在监听任何IP),并使用LTE互联网连接我的安卓手机,我会得到一个不同的错误:
"无法创建到数据库服务器的连接"
截至目前为止,我的研究都没有帮助我解决问题。有人知道我的问题可能来自哪里吗? 提前感谢你们:)