ベンダーが提供する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を使って実行する方法を解説します。
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());
}
}
}

