Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让MySQL Connector/J在android上工作?_Java_Android_Mysql - Fatal编程技术网

Java 如何让MySQL Connector/J在android上工作?

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

我有一个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;
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

  • 只需下载正确的连接器
  • 通过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();
                    }
                }
            }
        }
    

  • 它对我来说非常完美,我没有任何问题

    通常,推荐的方法是发布到web服务,并允许web服务在数据库上执行所需的操作。但是,有一个开源库,它允许您直接连接到数据库服务器,而无需web服务

    该库是相当新的,已经针对MySQL 5.1->5.7进行了测试,它还应该与MariaDB的等效MySQL版本兼容


    免责声明:是我写的

    谢谢你花时间回答。看起来我必须使用PHP脚本作为接口。