如何使 MySQL Connector/J 在 android 上工作?
Posted
技术标签:
【中文标题】如何使 MySQL Connector/J 在 android 上工作?【英文标题】:How to make MySQL Connector/J working on android? 【发布时间】:2014-09-22 13:44:09 【问题描述】:我有一个 mysql 服务器在本地 Linux 机器上运行。我没有遇到任何问题,通过一个简单的 Java 程序(在 eclipse 中运行)使用 MySQL Connector/J 与它通信和执行 SQL 语句。 这是我的简单 Java 程序:
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 中完美运行,并且可以毫无问题地执行与 UPDATE SQL 请求一样多的 SELECT。 当我尝试将此请求方法调整到我的 MainActivity.java 类时,我的 android 应用程序确实正确加载了驱动程序,但无法与我的 MySQL 服务器通信并返回错误。
如果我在前面的代码中输入本地 IP 地址到我的服务器并将我的 android 手机连接到 Wi-Fi,那么我的应用程序会返回我:
"通信链路故障。最后一个数据包成功发送到 服务器是 0 毫秒前。驱动程序没有收到任何数据包 来自服务器。”
但是,如果我尝试在之前的代码中向我的服务器输入一个外部 IP 地址(不要担心 MySQL 端口对互联网开放并且我的服务器正在侦听任何 IP),请使用我的 android 手机通过LTE 互联网连接,我收到另一个错误:
“无法创建与数据库服务器的连接”
到目前为止,我的研究都没有帮助我。有谁知道我的问题可能来自哪里? 在此先感谢:)
【问题讨论】:
【参考方案1】:在转向 Android 世界的 Java 开发人员中普遍存在的误解是,为老式 Java 创建的所有内容也可以在 Android 上使用。由于 Android 对 Java 的使用违反了 Java 的主要原则,“一次编写,到处运行”,这根本不是真的。我见过有人尝试在 Android 中使用常见的 Apache jar,这导致了奇怪的错误(请参阅 Can't import Apache HTTP in Eclipse)。
Java JDBC 驱动程序和 API 似乎也存在同样的问题,例如在这里查看答案:Connecting to MySQL from Android with JDBC
常见的建议 - 每次尝试在 Android 上使用 3rd 方 JAR 时,请检查它是否与后者兼容,或者是否有特定于 Android 的端口。
【讨论】:
感谢您花时间回答。看来我将不得不使用 php 脚本作为接口。【参考方案2】:通常,推荐的方法是发布到 Web 服务,并允许 Web 服务对数据库执行所需的操作。但是,GitHub 上有一个开源库,它允许您直接连接到数据库服务器,而无需 Web 服务。
该库是相当新的,并且已经针对 MySQL 5.1 -> 5.7 进行了测试,这也应该与 MariaDB 的等效 MySQL 版本兼容。
免责声明:我写的。
【讨论】:
【参考方案3】:如果您使用正确的连接器,这是可能的。 我使用连接器 3.0.17,在其他一些示例中,连接器是 mysql-connector-java-5.1.24-bin.jar
-
只需下载正确的连接器。
libs 上的 connector-java.x.x.x-bin.jar 过去
导入java.sql
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();
它非常适合我,我没有遇到任何问题!!!
【讨论】:
以上是关于如何使 MySQL Connector/J 在 android 上工作?的主要内容,如果未能解决你的问题,请参考以下文章
与 MySql 的连接正在自动中止。如何正确配置Connector/J?
MySQL------如何安装mysql-connector-java-5.1.38.zip