14

我使用以下代码从 Android连接MySQLlocalhost它仅显示 catch 部分中给出的操作。不知道是不是连接问题。

package com.test1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Test1Activity extends Activity {
    /** Called when the activity is first created. */
    String str="new";
    static ResultSet rs;
    static PreparedStatement st;
    static Connection con;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final   TextView tv=(TextView)findViewById(R.id.user);

        try
        {
            Class.forName("com.mysql.jdbc.Driver");
              con=DriverManager.getConnection("jdbc:mysql://10.0.2.2:8080/example","root","");
            st=con.prepareStatement("select * from country where id=1");
            rs=st.executeQuery();
             while(rs.next())
             {
             str=rs.getString(2);


             }


            tv.setText(str);
            setContentView(tv);
        }
        catch(Exception e)
        {
            tv.setText(str);
        }
    }
}

当此代码执行时,它会在 avd 中显示“new”。

java.lang.management.ManagementFactory.getThreadMXBean, referenced from method com.mysql.jdbc.MysqlIO.appendDeadlockStatusInformation
Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo
Could not find method javax.naming.Reference.get, referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.initializeFrom

任何人都可以提出一些解决方案吗?并提前感谢

4

7 回答 7

14

您无法从 Android 本地访问 MySQL 数据库。编辑:实际上您可能能够使用 JDBC,但不推荐(或可能不起作用?)...请参阅Android JDBC not working: ClassNotFoundException on driver

http://www.helloandroid.com/tutorials/connecting-mysql-database

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/8339-connect-android-mysql-database-tutorial.html

Android 无法直接连接到数据库服务器。因此,我们需要创建一个简单的 Web 服务,它将请求传递到数据库并返回响应。

http://codeoncloud.blogspot.com/2012/03/android-mysql-client.html

对于大多数 [good] 用户来说,这可能没问题。但是想象一下,你遇到了一个黑客,他掌握了你的程序。我已经反编译了我自己的应用程序,而且我所看到的很可怕。如果他们将您的用户名/密码获取到您的数据库并造成严重破坏怎么办?坏的。

于 2012-09-02T03:23:06.303 回答
4

此代码永久运行!!!由diko(土耳其)创建

public void mysql() {

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();

    }

    thrd1 = new Thread(new Runnable() {
        public void run() {
            while (!Thread.interrupted()) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e1) {

                }
                if (con == null) {
                    try {
                        con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ali", "12345");

                    } catch (SQLException e) {
                        e.printStackTrace();
                        con = null;
                    }

                    if ((thrd2 != null) && (!thrd2.isAlive()))
                        thrd2.start();

                }
            }

        }
    });
    if ((thrd1 != null) && (!thrd1.isAlive())) thrd1.start();

    thrd2 = new Thread(new Runnable() {
        public void run() {
            while (!Thread.interrupted()) {

                if (con != null) {
                    try {
                     //   con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ali", "12345");
                        Statement st = con.createStatement();
                        String ali = "'fff'";
                        st.execute("INSERT INTO deneme (name) VALUES(" + ali + ")");
                      //  ResultSet rs = st.executeQuery("select * from deneme");
                      //  ResultSetMetaData rsmd = rs.getMetaData();
                      //  String result = new String();


                      //  while (rs.next()) {
                      //      result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
                     //       result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";


                     //   }

                    } catch (SQLException e) {
                        e.printStackTrace();
                        con = null;
                    }

                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    });


}
于 2013-08-12T07:30:07.437 回答
2

如果您需要将应用程序连接到服务器,您可以通过 PHP/MySQL 和 JSON http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/ .Mysql连接代码应该在 AsynTask 类中。不要在主线程中运行它。

于 2013-10-06T16:00:54.653 回答
0

您想将数据库保存在移动设备上吗?使用 sqlite 而不是 mysql。

如果想法是将数据库保留在服务器上并从移动设备访问。使用网络服务来获取/修改数据。

于 2012-09-02T03:43:12.870 回答
0

另一种方法是使用使用三层架构的虚拟 JDBC 驱动程序:您的 JDBC 代码通过 HTTP 发送到远程 Servlet,该 Servlet 在将 JDBC 代码(配置和安全性)传递给 MySql JDBC 驱动程序之前对其进行过滤。结果通过 HTTP 发回给您。有一些免费软件使用这种技术。只需谷歌“基于 HTTP 的 Android JDBC 驱动程序”。

于 2013-01-28T14:01:04.103 回答
0

尝试在 gradle 文件中将 targetSdkVersion 更改为 8

targetSdkVersion 8
于 2016-05-20T02:45:47.217 回答
-1
public void testDB() {
        TextView tv = (TextView) this.findViewById(R.id.tv_data);
        try {

            Class.forName("com.mysql.jdbc.Driver");

            // perfect

            // localhost

            /*
             * Connection con = DriverManager .getConnection(
             * "jdbc:mysql://192.168.1.5:3306/databasename?user=root&password=123"
             * );
             */

            // online testing

            Connection con = DriverManager
                    .getConnection("jdbc:mysql://173.5.128.104:3306/vokyak_heyou?user=viowryk_hiweser&password=123");

            String result = "Database connection success\n";
            Statement st = con.createStatement();

            ResultSet rs = st.executeQuery("select * from tablename ");
            ResultSetMetaData rsmd = rs.getMetaData();

            while (rs.next()) {

                result += rsmd.getColumnName(1) + ": " + rs.getString(1) + "\n";

            }
            tv.setText(result);
        } catch (Exception e) {
            e.printStackTrace();
            tv.setText(e.toString());
        }

    }
于 2015-09-09T05:18:25.740 回答