嗨,请帮我这个android sql连接

时间:2014-10-31 02:24:47

标签: java android mysql jdbc

美好的一天,

我正在创建一个远程连接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”......这段代码中似乎缺少什么?或者我做错了,请帮忙......

谢谢..

1 个答案:

答案 0 :(得分:0)

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

尝试从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()调用该方法。

注意:

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

这是授予app ip访问权限的查询。

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