Java 如何让MySQL Connector/J在android上工作?
我有一个MySQL服务器在本地Linux机器上运行。通过一个简单的Java程序(在eclipse内部运行)使用MySQL连接器/J与它通信并执行SQL语句,我没有遇到任何问题。 下面是我的简单Java程序:Java 如何让MySQL Connector/J在android上工作?,java,android,mysql,Java,Android,Mysql,我有一个MySQL服务器在本地Linux机器上运行。通过一个简单的Java程序(在eclipse内部运行)使用MySQL连接器/J与它通信并执行SQL语句,我没有遇到任何问题。 下面是我的简单Java程序: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; imp
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和UPDATESQL请求,而不会出现任何问题。
当我尝试将此请求方法改编为MainActivity.java类时,我的android应用程序确实正确加载了驱动程序,但无法与MySQL服务器通信,并返回一个错误
如果我在前面的代码中输入服务器的本地IP地址,并将我的android手机连接到Wi-Fi,则我的应用程序会返回我:
“通信链路故障。最后一个数据包成功发送到
服务器在0毫秒前关闭。驱动程序尚未收到任何数据包
来自服务器。“
但是,如果我尝试在前面的代码中输入服务器的外部IP地址(不要担心MySQL端口对internet开放,并且我的服务器正在侦听任何IP),通过LTE internet连接使用我的android手机,我会得到一个不同的错误:
“无法创建到数据库服务器的连接”
到目前为止,我的任何研究都没有帮到我。有人知道我的问题来自哪里吗?
提前感谢:)正在转向Android世界的Java开发人员的普遍误解是,为旧的好Java创建的所有东西也可以在Android上使用。由于Android对Java的使用违反了主要的Java原则,“写一次,到处运行”,这根本不是事实。我见过有人试图在Android上使用常见的ApacheJAR,这导致了奇怪的错误(请参阅) Java JDBC驱动程序和API似乎也存在同样的问题,例如,请参见此处的答案:
常见的建议——每次当你尝试在Android上使用第三方JAR时,检查它是否与后者兼容,或者是否有一个特定于Android的端口 如果使用正确的接头,则有可能。 我使用连接器3.0.17,在其他一些示例中,连接器是mysql-connector-java-5.1.24-bin.jar
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
使用下一种方法进行连接
public void conectarBDMySQL (String user, String password,
String ip, String port, String cat)
{
if (conexionMySQL == null)
{
String urlConexionMySQL = "";
if (cat!= "")
urlConexionMySQL = "jdbc:mysql://" + ip + ":" + port+ "/" + cat;
else
urlConexionMySQL = "jdbc:mysql://" + ip + ":" + port;
if (user!= "" & password!= "" & ip != "" & port!= "")
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conexionMySQL = DriverManager.getConnection(urlConexionMySQL,
user, password);
}
catch (ClassNotFoundException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
catch (SQLException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
}
}
它对我来说非常完美,我没有任何问题 通常,推荐的方法是发布到web服务,并允许web服务在数据库上执行所需的操作。但是,有一个开源库,它允许您直接连接到数据库服务器,而无需web服务 该库是相当新的,已经针对MySQL 5.1->5.7进行了测试,它还应该与MariaDB的等效MySQL版本兼容
免责声明:是我写的 谢谢你花时间回答。看起来我必须使用PHP脚本作为接口。