我看过很多关于这个问题的帖子,它们涉及数据库权限或防火墙设置,但我似乎遇到了不同的问题。
我收到错误消息“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障。成功发送到服务器的最后一个数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。” 尝试从 Android 应用程序打开到远程数据库的 jdbc 连接时。
我知道这不是权限、防火墙或数据库可用性的问题,因为我能够使用完全相同的 java 类来连接不同的应用程序并进行更改,并且此功能在之前的代码迭代中运行良好,但是现在正在引起问题。它的调用方式相同,唯一的区别是在一个项目中它是一个 Android 应用程序,而在另一个项目中它是一个常规 Java 应用程序。如果有人对可能出现的问题有任何想法,请告诉我。我正在使用的类如下:
public class DatabaseHandler{
private static String address;
private String username;
private String password;
private static Connection con;
public DatabaseHandler(String url, String un, String pw){
address = "jdbc:mysql://[remote server IP]:3306/nfcgeo";
username = un;
password = pw;
}
public void openDB() throws Exception{
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(address, username, password);
}
在 android 应用程序的 MainMenu 类中:
public void onCreate(Bundle savedInstanceState)
{
setupDatabaseConnection(context);
if(!dbAvailable)
{
noDatabaseConnection(context);
}
public static void setupDatabaseConnection(Context _context)
{
try
{
dbHandle = new DatabaseHandler("","root","rootpw");
dbHandle.openDB();
dbAvailable = true;
}
catch(Exception e)
{
dbAvailable = false;
e.printStackTrace();
}
}
同样,如果在 android 应用程序之外使用 DatabaseHandler 类,它可以完美地工作,我只有在从主菜单调用它时才会得到异常。如果有人有任何想法,请告诉我。谢谢。