我在这个问题上看过很多关于数据库权限或防火墙设置的帖子,但我似乎遇到了不同的问题。
我收到错误消息" 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类可以正常工作,我只能在从主菜单调用时获得异常。如果有人有任何想法,请告诉我。感谢。
答案 0 :(得分:0)
这种情况正在发生,因为服务器没有分配给名为u的用户的权限,此处提供用户名
因此您需要在数据库上运行命令