【问题标题】:Hi, Please help me with this android sql connection嗨,请帮我解决这个 android sql 连接
【发布时间】:2014-12-27 07:09:40
【问题描述】:

早安,

我目前正在创建一个可以远程连接 SQL 数据库的 android 程序...我在另一台计算机上使用 XAMPP..这是我要连接的代码:(mysql-connector 已导入)

String url = "jdbc:mysql://xxx.xxx.x.xx:3306/mydatabase?allowMultiQueries=true&useOldAliasMetadataBehavior=true";
        String user = "root";
        String password = "mypassword";
        int a = 0;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            a = 1;
            Connection con = DriverManager.getConnection(url, user, password);
            a = 12;
            Statement st = con.createStatement();
            a = 123;
            ResultSet rs = st.executeQuery("SELECT * FROM mytable");
            a = 1234;
            while(rs.next())
            {


            }
            tDisplayS.setText("YES");
        }
        catch(Exception e)
        {
            tDisplayS.setText(a+"");
        }

当我运行我的程序时..我总是会发现一个错误并且只显示“1”......这段代码似乎缺少什么?或者我做错了,请帮助...

谢谢你..

【问题讨论】:

  • 您的代码似乎在 a = 1 后遇到异常,请尝试将 e->getMessage() 放入您的 catch 块中以显示错误并从那里进行故障排除。
  • 您似乎遇到了基本的连接问题。我会先在命令行中使用 mysql 或 MySQL Workbench 之类的工具尝试连接。
  • 您好@Sted 感谢您的回复... 这是 e.getMessage() 通信链接失败的消息 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有从服务器收到任何数据包。
  • 嗨@PatrickRead .. 我想我遇到了这个基本问题:D .. 嗯好的我会尝试使用 MySQL Workbench .. 谢谢
  • 你可能想看看这个:stackoverflow.com/questions/6865538/…

标签: java android mysql jdbc


【解决方案1】:

我认为这是因为您试图从主线程连接远程数据库。

尝试从 Thread 连接。

public void connectToMySql(){

        new Thread(new Runnable() {
            @Override
            public void run() {
                String url = "jdbc:mysql://xxx.xxx.x.xx:3306/mydatabase?allowMultiQueries=true&useOldAliasMetadataBehavior=true";
                String user = "root";
                String password = "mypassword";
                int a = 0;
                try
                {
                    Class.forName("com.mysql.jdbc.Driver");
                    a = 1;
                    Connection con = DriverManager.getConnection(url, user, password);
                    a = 12;
                    Statement st = con.createStatement();
                    a = 123;
                    ResultSet rs = st.executeQuery("SELECT * FROM mytable");
                    a = 1234;
                    while(rs.next())
                    {


                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tDisplayS.setText("YES");        
                        }
                    });

                }
                catch(final Exception e)
                {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tDisplayS.setText(e.printStackTrace());        
                        }
                    });

                }
            }
        }).start();

    }

只需复制此方法并从您的活动的onCreate() 调用它。

注意:

确保您的数据库必须授予所有主机访问权限。 您需要触发查询以授予对数据库上所有远程主机的访问权限。

这是授予对应用 ip 访问权限的查询。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多