web-dev-qa-db-ja.com

JDBCを使用してAndroidからMySQLに接続する

次のコードを使用して、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

誰かが解決策を提案できますか?事前に感謝します

13
manuraphy

MySQLデータベースには、Androidネイティブでアクセスできません。 Android JDBCが機能しない:ドライバーでClassNotFoundException

見る

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

ほとんどの[良い]ユーザーにとっては、これで問題ないでしょう。しかし、あなたがあなたのプログラムを手に入れるハッカーを得ると想像してください。私は自分のアプリケーションを逆コンパイルしましたが、見たものは怖いです。彼らがあなたのデータベースにあなたのユーザー名/パスワードを手に入れて大混乱をもたらすとしたらどうでしょう?悪い。

13
Jack

このコードは永久に実行されます!!! 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();
                    }
                }
            }
        }

    });


}
4
Ali

アプリケーションをサーバーに接続する必要がある場合は、PHP/MySQLおよびJSONを使用して実行できます http://www.androidhive.info/2012/05/how-to-connect-Android-with-php- mysql / .Mysql接続コードはAsynTaskクラスにある必要があります。メインスレッドで実行しないでください。

2
Arun

データベースをモバイルに保持しますか? mysqlの代わりにsqliteを使用します。

アイデアがサーバー上にデータベースを保持し、モバイルからアクセスすることである場合。 Webサービスを使用して、データを取得/変更します。

0
Kamal

gradleファイルでtargetSdkVersionを8に変更してみてください

targetSdkVersion 8
0
David Untama

もう1つのアプローチは、3層アーキテクチャを使用する仮想JDBCドライバーを使用することです。JDBCコードは、MySql JDBCドライバーに渡す前にJDBCコード(構成とセキュリティ)をフィルター処理するリモートサーブレットにHTTP経由で送信されます。結果はHTTP経由で返送されます。この手法を使用するいくつかのフリーソフトウェアがあります。 Googleの「HTTP経由のAndroid JDBCドライバー」。

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

    }
0
user3252230