我制作了一个访问数据库的Java程序。在开发阶段,我使用了本地数据库(XAMPP与MySQL),但是当我尝试访问2个不同的在线数据库(商业和免费)数据库时,我在两种情况下都收到以下异常:
SQLException:通讯链接失败
成功发送到服务器的最后一个数据包是0毫秒 前。驱动程序未收到来自服务器的任何数据包。
我没有任何问题使用PHP进行访问。
这是我的代码:
private String user = "user1";
private String pass = "pass1";
private String dbClass = "com.mysql.jdbc.Driver";
private String dbDriver = "jdbc:mysql://db4free.net:3306/DBNAME";
private Connection conn = null;
public boolean connect() {
boolean done = false;
//load driver
try {
Class.forName(dbClass).newInstance();
System.out.println("driver loaded"); // THIS IS BEING RETURNED
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
System.err.println(ex);
}
// Connection
try {
conn = DriverManager.getConnection(dbDriver, user, pass);
System.out.println("connected"); // THIS IS NOT BEING RETURNED
done = true;
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
}
return done;
}
答案 0 :(得分:0)
MySQL数据库不仅允许用户使用特定密码进行连接,还可以使用IP范围或地址进行连接。
http://dev.mysql.com/doc/refman/5.1/en/create-user.html
CREATE USER 'jeffrey'@'127.0.0.1' IDENTIFIED BY 'mypass';
因此,在线数据库可能不允许该用户从您的IP地址或块进行连接。
答案 1 :(得分:0)
在db4free上新创建的帐户中,您的代码适用于我:
检查以下事项:
Should show either your public ip or a single %
Your username and password is correct, will also verify your account is confirmed.
“DBNAME”是正确的,登录db4free.net上的“phpMyAdmin-Login:”,DBNAME将在“information_schema”上方的左侧
最后,您的本地防火墙不会阻止您:
telnet db4free.net 3306 (from a command line/prompt)
(如果您收到提示,防火墙会让您通过。)
答案 2 :(得分:0)
您的代码中没有提到端口号。以下是工作代码的示例。
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println(" Unable to load driver. ");
}
String url = "jdbc:mysql://DBSERVERNAME:3306/DATABASENAME";
String username = "user";
String password = "pass";
try {
this.conn = DriverManager.getConnection(url, username, password);
System.out.println(" Connection Established. ");
} catch (SQLException e) {
System.out.println(" Error connecting to database: "
+ e);
}
然而,这个问题可能有几个原因。
类似文章:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure
答案 3 :(得分:0)
我认为可能是因为防火墙问题,通常服务器可能正在侦听127.0.0.1的ip地址,所以你只能从本地系统访问我的sql,在配置文件中将其更改为0.0.0.0,然后它会开始工作。
答案 4 :(得分:-1)
static private String user = "ajaykakkar";
static private String pass = "ajaykakkar7432";
static private String dbClass = "com.mysql.jdbc.Driver";
// its - - - " jdbc:mysql://www.db4free.net:3306 / yourdatabasename_ark&#34 ;;
static private String dbDriver = "jdbc:mysql://www.db4free.net:3306/yourdatabasename_ark";
static private Connection conn = null;
public static boolean connect() {
boolean done = false;
//load driver
try {
Class.forName(dbClass).newInstance();
System.out.println("driver loaded"); // THIS IS BEING RETURNED
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
System.err.println(ex);
}
// Connection
try {
conn = DriverManager.getConnection(dbDriver, user, pass);
System.out.println("connected"); // THIS IS NOT BEING RETURNED
done = true;
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
}
return done;
}
public static void main(String args[]) {
connect();
}
// @ ajay.r.kakkar
完成