14

次のコードを使用して、Androidから接続MySQLしました。localhostcatch セクションで指定されたアクションのみを表示します。接続の問題かどうかはわかりません。

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 DB にアクセスすることはできません。EDIT:実際にはJDBCを使用できるかもしれませんが、推奨されていません(または機能しない可能性がありますか?)... 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

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

于 2012-09-02T03:23:06.303 に答える
0

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

于 2013-01-28T14:01:04.103 に答える
0

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

targetSdkVersion 8
于 2016-05-20T02:45:47.217 に答える
0

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

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

于 2012-09-02T03:43:12.870 に答える
-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 に答える