使用JDBC从Android连接到MySQL

使用JDBC从Android连接到MySQL,android,mysql,jdbc,Android,Mysql,Jdbc,我使用以下代码从Android连接localhost中的MySQL。它只显示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 andro

我使用以下代码从Android连接
localhost
中的
MySQL
。它只显示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中显示“新建”

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

有人能提出一些解决办法吗?提前感谢您

您无法从Android本机访问MySQL数据库。编辑:实际上您可能可以使用JDBC,但不推荐使用它(或者可能不工作?)。。。看


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


对于大多数[优秀的]用户来说,这可能没问题。但是想象一下你有一个黑客控制了你的程序。我已经反编译了我自己的应用程序,我所看到的非常可怕。如果他们将您的用户名/密码输入到您的数据库并造成严重破坏怎么办?坏。

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


如果想法是将数据库保存在服务器上,并通过移动设备进行访问。使用Web服务获取/修改数据。

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

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


如果您需要将应用程序连接到服务器,可以通过PHP/MySQL和JSON实现。MySQL连接代码应该在AsynTask类中。不要在主线程中运行它。

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

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());
        }

    }
targetSdkVersion 8

谢谢你的快速回复,杰克。Hai jack我没有收到该博客中给出的一些主要与Ksop private static final String SOAP_ACTION=“”)相关的内容;私有静态最终字符串方法\u NAME=“customerData”;私有静态最终字符串名称空间=”;私有静态最终字符串URL=“”;“Android无法直接连接到数据库服务器”这听起来像是福音。你到底在推销什么,中间商(SOAP,REST,Web服务和其他CORBA僵尸)?我不知道你怎么能认为这是一个答案。您不推荐支持数据库本机驱动程序的JDBC。然后你就不支持web服务了。那么告诉我,这个“答案”有什么用?@JohnMerlino他没有要求实现web服务,我也不打算在这里完整地编写一个。问题是“用JDBC从Android连接MySQL”。我做了研究并提供了信息。如果你觉得你能做得更好,请改进/编辑/创建你自己的答案。谢谢你,卡马尔。我在php中见过许多web服务实现。但是我需要一个JSP中的Web服务,因为我的服务器端是在JSP脚本中运行的。如果你知道一些东西,当然你可以使用JSP创建一个web服务。web服务只是一个web应用程序,它接受一个请求(string/XML)并返回一个响应(string/XML/JSON)。您可以用任何支持请求/响应体系结构(包括JSP)的语言轻松地完成这项工作。不过,如果您正在寻找一个适当的文档化、专业化和可重用的解决方案,您可以使用任何工具,如RESTEasy。如果您试图呈现完整的代码,请确保它能够编译
targetSdkVersion 8