SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Androidを使ったクライアント/サーバー・データベースシステム

Androidクライアントからデータベースサーバーへのアクセス

Androidを使ったクライアント/サーバー・データベースシステム 第1回


ベンダーが提供するJDBCドライバを使ってデータベースにアクセスするサンプルプログラム

 ここで紹介するプログラムはデータベースベンダーが正規にリリースするJDBCドライバを使って、Android端末からデータベースサーバーにアクセスするものです。どのような問題が起きるかは、後で説明することにします。問題点を先に知りたい方は4ページに進んでください。

 リスト2-1は、JDBCドライバを使ってAndroidからデータベースサーバーにアクセスする簡単なプログラム(MyDBApp.java)の全文です。実行画面である図2では、図1と同じサンプルデータベースから取得した本の題名が、1つだけ画面上部に表示されています。

 JavaとJDBCを使ってデータベースアプリケーションを開発したことがある人にとって、データベースアクセスの部分は、おなじみのプログラムコードのはずです。

AndroidのLayoutクラスについての簡単な説明

 Android用のプログラミングに見慣れない方には、データ表示部分が目新しいかもしれません。データ表示を担当するTextViewオブジェクトに、データベースから取得したデータが表示されているのは説明の必要はないでしょう。

 このオブジェクトを画面に配置するのに、AndroidではLayoutクラスを使用します。Layoutクラスには配置の方法によりいくつかの種類があります。垂直、あるいは水平に列挙してオブジェクトを配置するLinearLayoutクラスが一番使うことが多いでしょう。

 その他に表形式にオブジェクトを配置するTabaleLayoutクラスやGridLayoutクラスなどがありますが、ここではもっとシンプルなFrameLayoutクラスを使っています。このクラスはたった1つのオブジェクトを画面に配置するためのものです。言い換えると、このサンプルプログラムのように画面に1つしかオブジェクトを配置しないとしても、何がしらのLayoutクラスを使用する必要があります。

 そして配置したオブジェクトを画面に表示しているのが、次の1行です。

setContentView(layout);

エミュレータから、データベースサーバーに接続する場合の注意

 このプログラムは、Androidの開発用エミュレータと同じコンピュータで稼働するMySQLデータベースサーバーにアクセスしています。それを指定しているのが次の部分です。

conn = DriverManager.getConnection("jdbc:mysql://10.0.2.2/pubs", "root", "password");

 このときのIPアドレスが10.0.2.2になっているのに注意してください。Androidのエミュレータは、自身が動いているコンピュータのIPアドレスを10.0.2.2として扱います。

 このプログラムを実行する上で、しなければならないことが2つあります。1つはパーミッションの設定、もう一つはMySQLのJDBCドライバを、Javaのビルドパスに設定することです。

 次ページでは、それらの設定方法を説明するために、ダウンロード可能なこのMyDBApp.javaを、Eclipseを使って実行する方法を解説します。

リスト2-1 Android端末からMySQLにアクセスしてデータを取得する簡単なサンプルプログラムの全コード
package myDBApp.jar;
import android.os.Bundle;
import android.app.Activity;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import android.widget.FrameLayout;
import android.widget.TextView;

public class MyDBApp extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)    {
        super.onCreate(savedInstanceState);
        Connection conn;
        Statement stmt;
    ResultSet rs = null;

    //データを表示するためのtextViewクラス
    TextView textView=new TextView(this);
    //単一のオブジェクトを画面に配置するためのFrameLayoutクラス
        FrameLayout layout=new FrameLayout(this);
        
        //FrameLayoutオブジェクトにtextViewオブジェクトを登録
        layout.addView(textView);
        //FrameLayoutオブジェクトを表示
        setContentView(layout);

        try {
            //JDBCドライバを指定
            Class.forName("com.mysql.jdbc.Driver");
            //データベースに接続
            conn = DriverManager.getConnection("jdbc:mysql://10.0.2.2/pubs", "root", "password");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT title_id ,title FROM titles");
            rs.next();

            String text1 = rs.getString(2);
            
            //データをtextViewオブジェクトに表示
            textView.setText(text1);
            
        } catch(Exception e) {
            textView.setText(e.getMessage());
        }
    }
}
図2-1 サンプルプログラム(図2-1)の実行画面
図2-1 サンプルプログラム(図2-1)の実行画面

次のページ
サンプルプログラムからプロジェクトを構成する

この記事は参考になりましたか?

Androidを使ったクライアント/サーバー・データベースシステム連載記事一覧
この記事の著者

秋月 巌(アキヅキ イワオ)

秋月ソリューション事務所 秋月巌ソフトウェア開発者、及び、テクニカルライター執筆記事一覧秋月ソリューション事務所Webサイト

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5598 2010/12/14 16:46

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー