Pocket

Android プログラムで MySQL のデータを取ってくる方法

 AndroidのJavaコードからMySQLのデータを取り込む方法を紹介します。より簡単に機能を実装するため、javaからMySQLにアクセスするphpをコールする手段をとりました。Android黎明期(ボクは勝手に2010年前後と思ってます)はAndroidプログラミングに関する情報がホントに少なく、コーディング作業が進まず苦労しました。あまりの情報の無さにSDKのガイドを真面目に読みました。今日は当時ボクが実現に手こずったファンクションの一つである、”Android(java)でMySQLのデータをJSON形式で取ってくる方法”をまるっと書きます。本当はAndroidのjavaだけで書きたかったんですがMySQLへのアクセスはphpからのほうが楽なので、SQLデータのフェッチはphpを挟むことにしました。javaだけでも出来るんですかね?未トライです(´∀`)

まずはPHPでMySQLデータをもらってこよう。

 では早速PHPでMySQLのデータを取ってきます。拾ってきたデータは同じくPHPでJSON形式のデータ構造にエンコードしておきます。こんな感じです。説明を簡略化するため、sqlコマンドの例外処理と文字エンコード指定等は省略させてもらってます。

<?php
  $con = mysql_connect(サーバーネーム(getSERVER),データベースのID(getID),データベースのパスワード);
  $db_sel = mysql_select_db(データベースの名前, $con);
  $query="SELECT * FROM ".テーブルの名前." WHERE dat1='".検索語."'";
  $res=mysql_query($query);
  $output=array();
  while($e=mysql_fetch_assoc($res)){$output[]=$e;}
  mysql_free_result($res);
  mysql_close($con);
  echo json_encode($output);
?>

では少しずつ解説していきます。

$con = mysql_connect(サーバーネーム(getSERVER),データベースのID(getID),データベースのパスワード); 
$db_sel = mysql_select_db(データベースの名前(getDB), $con);

まずはmysql_connectコマンドでMySQLに接続します。接続後、mysql_select_dbコマンドで検索対象のデータベースを選択します。

$query="SELECT * FROM ".テーブルの名前." WHERE dat1='".検索語."'";
$res=mysql_query($query) ;

検索クエリを$query変数に代入後、mysql_queryコマンドで検索を実行します。この例は指定したテーブル内の項目”dat1”から検索語を含むデータを検索し、結果を$res変数に代入します。

$output=array();
while($e=mysql_fetch_assoc($res)){$output[]=$e;}

$output変数に配列を指定します。$e変数に先ほどの検索結果$res1つ1つを連想配列で代入し、$output配列に代入していきます。

mysql_free_result($res);
mysql_close($con);

sql_free_resultコマンドで検索結果を破棄、mysql_closeコマンドで接続を閉じます。

echo json_encode($output);

$outputをjson形式のデータとして出力します。

これでphpを使ってjsonデータを吐き出す準備が出来ました。完成したこのphpファイルをサーバーにアップしておきます。

次にjavaでPHPにhttp通信でアクセス

AndroidでmySQLのデータを引っ張ってくる方法を解説します。ちょっと難しいです。
先ほどのphp内のgetSERVER,getDB,getIDは下記Java関数の引数です。

public static InputStream is = null;
public static JSONArray json_array = null;
public static DefaultHttpClient httpClient;

public static void main(String getSERVER,String getURL,String getDB,String getID){
    // スキーム登録:スキーム(httpやhttpsなんか)を登録します。ポート80番で接続
    SchemeRegistry schReg = new SchemeRegistry();
    schReg.register(new Scheme(HttpHost.DEFAULT_SCHEME_NAME,PlainSocketFactory.getSocketFactory(),80));

    // HTTPパラメータ設定:プロトコルやエンコードを指定します。
    HttpParams httpParams;
    httpParams= new BasicHttpParams();
    HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);

    // HTTPクライアント生成:httpを利用するためのクライアント生成(ブラウザみたいな感じです)
    httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, schReg),httpParams);    

    
// HTTP Request送信
    HttpResponse response = null;
    try{
        // URIを設定:先ほど作成したphpファイルにアクセスするための情報を設定。
        Uri.Builder uriBuilder = new Uri.Builder();
        uriBuilder.path(getURL); //先ほど作成したphpのURLを設定
        uriBuilder.appendQueryParameter("SERVER",getSERVER); // サーバー名を設定
             
        uriBuilder.appendQueryParameter("ID",getID); // UserIDを設定                
        uriBuilder.appendQueryParameter("db_name",getDB); // Database名を設定
        //↓このresponse変数がphpで出力したJSONデータを受け取る。    
        response = httpClient.execute(new HttpHost(getSERVER),new HttpGet(uriBuilder.build().toString()));
    }catch(Exception e){
        Log.e("Errrer","接続エラー");
        return;
    }    

    // レスポンスコードを確認:きちんとデータが返ってきたか一応確認
    if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK){
        Log.e("Error",response.getStatusLine().getStatusCode());
        return;
    }

    // レスポンスを取得してStringに変換
    StringBuilder json = new StringBuilder();
    try{
        HttpEntity entity = response.getEntity();
        InputStream input = entity.getContent();
        InputStreamReader reader = new InputStreamReader(input);
        BufferedReader bufReader = new BufferedReader(reader);
        String line;
        while((line = bufReader.readLine()) != null){
            json.append(line);
        }
    }catch(IOException e){
        Log.e("Errrer","バッファ読み込み失敗");
        return;
    }

    // JSON解析:json_arrayにデータを格納。これでMySQLデータ読み込み完了です。
    try{
        JSONObject json_data = new JSONObject(json.toString());
        json_array = json_data.getJSONArray("response");
    }catch(JSONException e){
        Log.e("Errrer","JSONデータが不正");
        return;
    }
return;
}

以上がJavaのコードです。コピペで使えると思いますので、必要な部分は適当に弄ってご使用下さい。
今日はいきなり難しかったですね。久々にMySQLを使ったAndroidアプリを作ることになったので、この記事を書いてみました。

Androidアプリに関するお問い合わせ

 ComtopiaではAndroidアプリの制作も承っております。下記フォームよりお気軽にお問い合わせ下さい。
Androidアプリに関するお問い合わせ

パソコンのトラブルはこちらへ
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です