Android:com.mysql.jdbc.exceptions.jdbc4.communicationsexception 通信链路故障
Posted
技术标签:
【中文标题】Android:com.mysql.jdbc.exceptions.jdbc4.communicationsexception 通信链路故障【英文标题】:Android: com.mysql.jdbc.exceptions.jdbc4.communicationsexception communications link failure 【发布时间】:2013-01-07 00:16:17 【问题描述】:我有正确的 IP:Port,所以我不知道问题出在哪里,因为通信异常来自 mysql 数据库的损坏的 url:port。
package com.bbb.aaa;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity
private static final String url = "jdbc:mysql://uk1.khttp.net:2083/thedatabase"; // uk1.khttp.net == 95.154.195.28
private static final String user = "theusername";
private static final String pass = "thepassword";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("About to try instantiating driver");
TextView tv = (TextView)this.findViewById(R.id.text_view);
try
Class.forName("com.mysql.jdbc.Driver");
System.out.print("success");
Connection con = DriverManager.getConnection(url, user, pass);
String result = "Database connection success\n";
System.out.print("success2");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM testingregistration");
System.out.print("success3");
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next())
result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n";
tv.setText(result);
tv.setText("Driver instantiated");
catch (ClassNotFoundException e)
// TODO Auto-generated catch block
tv.setText(".....Class com.mysql.jdbc.Driver not found!");
e.printStackTrace();
catch (SQLException e)
// TODO Auto-generated catch block
e.printStackTrace();
tv.setText(e.toString());
ERROR LOG: The last packet sent successfuly to the server was 0 milliseconds ago. The driver has not recieved any packets from the server
控制台读取并打印“成功”,但随后崩溃,因此它不打印“成功2”,这意味着问题出在连接上。
我尝试在互联网上搜索这个问题,但他们只是说你的 ip:port 和数据库应该是正确的,但对我来说这似乎是正确的,因为我可以使用该 url 和端口以及登录名和密码详细信息登录到mysql 然后从那里我点击 phpMyAdmin 和我在数据库中。
提前致谢
【问题讨论】:
确保您已在清单中获得连接到 Internet 的权限。 感谢您提醒我添加权限。尽管在控制台中打印出第一个“成功”后我仍然遇到相同的错误和脚本错误 看看这个答案中的建议 - ***.com/a/12233178/392781。 Connecting to MySQL from Android with JDBC的可能重复 【参考方案1】:使用 AsyncTask。你的 try catch 块代码写在 asynctask 的 doInBackground
方法中。试试看。
【讨论】:
以上是关于Android:com.mysql.jdbc.exceptions.jdbc4.communicationsexception 通信链路故障的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )