본문 바로가기
IT

MySQL Connector/JをAndroidから使ってみる

by 엘리후 2021. 7. 5.

本チュートリアルの内容

開発環境の確認

Eclipseを使ってDB接続する

Android Studioでjarファイルを読み込む

応用問題に挑戦してみよう

■ 開発環境の確認

前提とする環境

このチュートリアルでは、以下の環境を想定します。Androidの開発環境としては、Eclipseを想定しますが、Eclipseの設定は済んでいるものとして説明を進めます。

開発PC:Windows7 Professional、MySQL5.5.15、MySQL Connector/J 5.1.27

開発環境: Eclipse Juno Service Release 2

開発の準備

開発に使用するMySQLはMySQLのページからダウンロードして、インストールする必要があります。以下のチュートリアルを参考にして、MySQLを設定しましょう。

MySQLを使ってみよう

DBは、上のチュートリアルで作成したものを利用します。また、MySQL Connector/Jも、本チュートリアルを作成時点で最新のものを使用します。 MySQL Connector/JはMySQLのホームページからダウンロードできます。

図 MySQL Connector/Jのダウンロード

mysql-connector-java-(version).zipがダウンロードされたら、zipを解凍して、出てきたフォルダをわかりやすいところに保存しておきます。(※mysql-connector-javaのバージョンですが、JDKのバージョンとの整合性があるようですので、最新のものを使用すると動かないことがあるかもしれません。その場合には、少し前の安定したバージョンを使用してみ下さい。)

実際に使用するのは、このフォルダ内のmysql-connector-java-(version)-bin.jarです。

ページの先頭へ

■ Eclipseを使ってDB接続する

では、さっそく、Eclipseを立ち上げて、Androidのアクティビティを作成してみましょう。ここでは、Eclipseで、DBConnectというAndroidプロジェクトを立ち上げました。

image_not_found

図 Androidプロジェクトの作成

パッケージ名は、他のパッケージと重ならないような名前をつけておきましょう。

image_not_found

図 プロジェクトの設定

次へを押下して、先に進みます。カスタム・ランチャー・アイコンは作らなくてもよいでしょう。また、アクティビティは作成し、初期の画面としては、Blank Activityを選択しておけばよいです。Activity名は好きなものを選択してください。ここではデフォルトのもので先に進めましょう。

image_not_found

図 アクティビティ名

さて、プロジェクトの初期画面として、レイアウト画面が表示されたでしょうか。

image_not_found

図 初期レイアウト

ここで、早速ですが、画面に表示されているTextViewに名前をつけておきます。レイアウトをグラフィカルレイアウトから、テキストエディタで開いたものに変えてください。画面下のタブを選択することで画面が切り替わります。デフォルトで記述されているTextViewをそのまま用います。ただ、TextViewにIDが付いていませんので、IDの記述をTextViewタグの中に追加しておきます。TextViewのタグの中身は以下のようになります。初期の文字も特に必要はありません。

?

1
2
3
4
5
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

これで、textview1でこのTextViewを参照することができます。レイアウトは特に変更しませんので、タブは閉じてしまってかまいません。

次に、srcフォルダの中の、MainActivity.javaを開きます。Eclipseが作成した初期画面が入っていると思います。まず、使用するライブラリを追加しておきます。importのところに以下のものを追加します。まだ、使用していないので、警告が出ますが、気にしなくてよいです。

?

1
2
3
4
5
6
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
import android.widget.TextView;
import android.os.AsyncTask;

さて、ここで、今回のコーディングの流れについて、説明します。今回は、アプリケーションを起動したら、そのまま、DBにアクセスして、結果を画面に表示するというアプリケーションを作成します。ただし、単純にUIを制御するスレッドでDB接続や、SQL文を送るればよいのではなく、接続は、非同期でおこなう必要があります。これは、Android 3.0から変更になったということのようです(詳細は他の参考資料へ)。

そこで、流れとしては、UIのスレッドから、非同期クラスのインスタンスを作成し、それを実行することでDB接続をするということになります。ではまず、メインのクラスとは別に、非同期のクラスを作成してみます。ここでは、TaskDbConnectというクラスを作成します。AsyncTaskクラスを継承するこのクラスは、3つのパラメータの方の型を指定する必要があります。

?

1
2
3
class TaskDbConnect extends AsyncTask<Void, Void, String>{
// この中をこれから記述
}

最初が、読み出し元でメソッドが実行される時に渡される引数の型、2つ目は進捗を表現する時に使用する型、3つ目はスレッド終了時に返す値の型です。ここでは、起動時の引数は渡さないのでVoid、進捗も表示しないのでVoidとし、SQLのSelect文の結果を引き渡すために3つ目だけをStringとしました。

では、実際にクラスの中身を書いていきます。まずは、呼び出し側のActivityをそのままインスタンス生成時の引数としてしまうこととしました(この方法が適しているかは不明です)。

クラス側でActivityを定義し、コンストラクタにおいて引数として渡されてきたアクティビティを代入します。

?

1
2
3
4
5
Activity activity = null;


public TaskDbConnect(Activity act){
activity = act;
}

次に、実際の処理を記述します。AsyncTaskでは、doInBackgroundメソッドを実装する必要があり、今回はそのメソッドにDBアクセスのコードを記述します。記述の内容は、通常のConnctor/Jの記述とほとんど同じです。取り出す値のところは、野菜の名前、生産者、住所とするように、テーブルの2番目、3番目、5番目、4番目の順に文字列型の変数に追記します。この結果をスレッド終了時のメソッド(onPostExecute)にreturnとして渡します。

DBのURL、ユーザー名、パスワードは皆さんの環境に合わせて設定してください。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
protected String doInBackground(Void... params) {
String text1="";


try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.0.2/picklog_db","user 名","パ スワード");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("Select * from log_tbl");


while(rs.next()){
int id=rs.getInt(1);
int location=rs.getInt(2);
String tid=rs.getString(3);
String time=rs.getString(4);
text1+=id+" "+location+" "+tid+" "+time+" "+"\r\n";
}


}catch(Exception e){
text1=e.getMessage();
}


return text1;
}

次に、終了時に呼ばれるメソッドです。

?

1
2
3
4
protected void onPostExecute(String result){
TextView tv = (TextView)activity.findViewById(R.id.textview1);
tv.setText(result);
}

ここで、tvというインスタンスを定義していますが、R.id.textview1が、先ほどレイアウトで指定したTextViewです。

以上で、TaskDbConnectクラスの作成は終わりです。

次に、メインのクラスの修正をします。

こちらは、Asyncクラスのインスタンスを作成し、メソッドを呼ぶだけの単純な追加となります。

?

1
2
3
4
5
6
7
8
9
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


// Asyncタスククラスのインスタンスを作成し、実行する
TaskDbConnect task = new TaskDbConnect(MainActivity.this);
task.execute();
}

コードの作成については以上の終わりです。次に、このアプリケーションがインターネット接続をする必要があるので、Manifestファイルの書き換えを行います。単純に、Internet接続のパーミッションを与えるだけで結構です。以下のタグをManifestに追加してください。

<uses-permission android:name="android.permission.INTERNET" />

コードの記述は以上です。最後に、MySQLConnector/Jをこのアプリケーションで利用できるようにします。そのためには、このプロジェクトのlibsに先ほど解凍した.jarファイルをインポートする必要があります。

インポートのやり方は、まず、プロジェクトのlibsフォルダで、右クリックし、Importを選択します。開いたウィンドウから、「ファイル・システム」を選択します。

image_not_found

図 ライブラリのインポート

次の画面で先ほど解凍したjarファイルを選択して読み込みます。終了すると、libsフォルダに、jarファイルが入っていることが確認できます。

では、実際にアプリケーションを立ち上げて見ましょう。

image_not_found

図 アプリケーションの起動

Androidの画面にクエリーの結果が表示されたでしょうか。

image_not_found

図 検索結果

ページの先頭へ

■ Android StudioでのJarの読み込み

Android Studioで開発する場合に、mysql-connector-java-(version)-bin.jarファイルをうまく読み込むことができないようです。そこで、試行錯誤してやってみました。

(1)libsフォルダへのjarファイルのコピー

まず、jarファイルをAndroidStudioの開発中のプロジェクトのlibsフォルダにコピーします。

image_not_found

図 Jarファイルのコピー

(2)Jarファイルのモジュール登録

次に、AndroidStudioでjarファイルをモジュール登録します。メニューの「ファイル」>「New Module...」を選び、開いた画面から、Import .JAR/.AAR Packageを選択します。

image_not_found

図 モジュールの追加

image_not_found

図 Jarファイルのインポート

開いた画面で、jarファイルを選択します。これで、モジュールが登録されます。

image_not_found

図 Jarファイルの選択

(3)Dependenciesの追加

次に、使用するライブラリとして認識させる処理の追加です。AndroidStudioの画面左上(正式な呼称がわかりません…)で、「Android」を選択し、その下の「app」で右クリックすることで、表示されるメニューから「Open Module Settings」を選択します。

image_not_found

図 Module設定変更

開いた画面で、「Dependencies」タブを選択し、右上の「+」ボタンを押下し、「3 Module dependency」を選択します。そして、開いたウィンドウで先ほど追加したモジュールを選択します。

image_not_found

図 Dependencyの追加

image_not_found

図 Moduleの選択

(4)再コンパイル

ここまで実行したら、プロジェクトを再コンパイルします。もしかしたら、AndroidStudioを再起動する必要があるかもしれませんので、うまくいかなかったら、再起動もしてみてください。表示されたでしょうか。

image_not_found

図 実行結果

AndroidStudioは使い慣れていないので、設定の仕方が最適ではない可能性もありますが、また、わかったことがあれば、直していきたいと思います。

■ 応用問題に挑戦してみよう

データの追加もやってみよう!

댓글