Android:如何在不使用 PHP 或任何网络服务的情况下将数据发送到远程数据库?

Posted

技术标签:

【中文标题】Android:如何在不使用 PHP 或任何网络服务的情况下将数据发送到远程数据库?【英文标题】:Android : How to send data to remote database without using PHP or any webservices? 【发布时间】:2013-03-22 06:56:24 【问题描述】:

我正在尝试将数据从 android 应用程序发送到 localhost mysql 数据库。我已经在 J​​AVA 中创建了应用程序,它工作正常。但是相同的代码在android中不起作用。什么问题。下面是安卓的代码。

public class MainActivity extends Activity

private Connection conn = null;  
private String url = "jdbc:mysql://localhost:3306/";
private String dbName = "testDB";
private String driver = "com.mysql.jdbc.Driver";  
private String userName = "root"; 
private String password = "";   
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 
try 
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url+dbName,userName,password);
        System.out.println("Connected to the database");
        Statement stmt = conn.createStatement();
        String sql = "INSERT INTO test " +
                "VALUES ('XYZ')";
        stmt.executeUpdate(sql); 

        conn.close();
        System.out.println("Disconnected from database");
     catch (Exception e) 
        e.printStackTrace();
    



我收到以下错误:

04-01 12:52:31.114: W/System.err(910): java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: localhost/127.0.0.1:3306 - Connection refused
04-01 12:52:31.114: W/System.err(910): ** BEGIN NESTED EXCEPTION ** 
04-01 12:52:31.114: W/System.err(910): java.net.SocketException
04-01 12:52:31.114: W/System.err(910): MESSAGE: java.net.ConnectException: localhost/127.0.0.1:3306 - Connection refused
04-01 12:52:31.114: W/System.err(910): STACKTRACE:
04-01 12:52:31.124: W/System.err(910): java.net.SocketException: java.net.ConnectException: localhost/127.0.0.1:3306 - Connection refused
04-01 12:52:31.124: W/System.err(910):  at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)
04-01 12:52:31.124: W/System.err(910):  at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
04-01 12:52:31.124: W/System.err(910):  at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)
04-01 12:52:31.124: W/System.err(910):  at com.mysql.jdbc.Connection.<init>(Connection.java:452)
04-01 12:52:31.124: W/System.err(910):  at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
04-01 12:52:31.124: W/System.err(910):  at java.sql.DriverManager.getConnection(DriverManager.java:191)
04-01 12:52:31.124: W/System.err(910):  at java.sql.DriverManager.getConnection(DriverManager.java:226)
04-01 12:52:31.124: W/System.err(910):  at com.example.getip.MainActivity.onCreate(MainActivity.java:138)
04-01 12:52:31.124: W/System.err(910):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-01 12:52:31.124: W/System.err(910):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-01 12:52:31.124: W/System.err(910):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-01 12:52:31.124: W/System.err(910):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-01 12:52:31.124: W/System.err(910):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-01 12:52:31.124: W/System.err(910):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 12:52:31.124: W/System.err(910):  at android.os.Looper.loop(Looper.java:123)
04-01 12:52:31.124: W/System.err(910):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-01 12:52:31.124: W/System.err(910):  at java.lang.reflect.Method.invokeNative(Native Method)
04-01 12:52:31.124: W/System.err(910):  at java.lang.reflect.Method.invoke(Method.java:521)
04-01 12:52:31.134: W/System.err(910):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-01 12:52:31.134: W/System.err(910):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-01 12:52:31.134: W/System.err(910):  at dalvik.system.NativeStart.main(Native Method)
04-01 12:52:31.134: W/System.err(910): ** END NESTED EXCEPTION **
04-01 12:52:31.144: W/System.err(910):  at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875)
04-01 12:52:31.144: W/System.err(910):  at com.mysql.jdbc.Connection.<init>(Connection.java:452)
04-01 12:52:31.144: W/System.err(910):  at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
04-01 12:52:31.156: W/System.err(910):  at java.sql.DriverManager.getConnection(DriverManager.java:191)
04-01 12:52:31.156: W/System.err(910):  at java.sql.DriverManager.getConnection(DriverManager.java:226)
04-01 12:52:31.156: W/System.err(910):  at com.example.getip.MainActivity.onCreate(MainActivity.java:138)
04-01 12:52:31.156: W/System.err(910):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-01 12:52:31.156: W/System.err(910):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-01 12:52:31.156: W/System.err(910):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-01 12:52:31.156: W/System.err(910):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-01 12:52:31.156: W/System.err(910):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-01 12:52:31.156: W/System.err(910):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 12:52:31.156: W/System.err(910):  at android.os.Looper.loop(Looper.java:123)
04-01 12:52:31.156: W/System.err(910):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-01 12:52:31.156: W/System.err(910):  at java.lang.reflect.Method.invokeNative(Native Method)
04-01 12:52:31.164: W/System.err(910):  at java.lang.reflect.Method.invoke(Method.java:521)
04-01 12:52:31.164: W/System.err(910):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-01 12:52:31.164: W/System.err(910):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-01 12:52:31.164: W/System.err(910):  at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

是您的设备/模拟器和您在同一网络上的数据库 jdbc:mysql://localhost:3306/: 这里的 localhost 是指运行程序的系统,在你的情况下是 android 设备,你需要提供安装 mysql 的系统的 ip跨度> @Atrix1987 我正在模拟器中尝试。 @CnchalShelar 我可以给这样的 ip jdbc:mysql://xx.xx.xx.xx:3306/: @sachi 是的,但正如你所说,你在模拟器中尝试过,它与 Mysql 是否在同一个系统上? 【参考方案1】:

我通过将 localhost 替换为 10.0.2.2 解决了

【讨论】:

以上是关于Android:如何在不使用 PHP 或任何网络服务的情况下将数据发送到远程数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 GSON 或 android 中的任何其他库的情况下使用改造以字符串形式获得响应 [重复]

如何从android的浏览器运行php脚本? [关闭]

如何在不先“下载”的情况下通过 Android 网络浏览器显示 PDF

在不使用 PHP 的情况下将 MySql 与 Android 连接

如何通过 php 推送到 iphone / android 手机

如何在不重新启动集群的情况下使用 Fargate 在 AWS EKS 内传播 DNS 主机名(网络更改)和/或角色更改?