Microsoft SQL Serverに、Android端末からアクセスする
JDBC経由でMicrosoft SQL Serverに接続する場合、サンプルプログラムのforNameメソッドの引数を次のように変更します。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
またDriverManagerクラスのgetConnectionメソッドの引数である接続文字列も次のように変更します。
conn = DriverManager.getConnection("jdbc:sqlserver://10.0.2.2:1433;databaseName=pubs;user=sa;password=password");
念のためプログラムの全文をリスト5-1に掲載します。
MicrosoftのJDBCドライバでは、Eclipseで警告が発生しない
Microsoft SQL Server用のJDBCドライバはMicrosoftのWebサイトからダウンロードできます。今回、外部JARとして指定するJDBCドライバはsqljdbc4.jarパッケージファイルです。
これを指定してもMySQLの新しいJDBCドライバを指定したときのような警告メッセージは表示されません。よい兆候です。
結論をいうと、この設定でMicrosoft SQL Server 2008では接続もできません。しかし、MSDE 2000ではサンプルプログラムは動作し、データを取得できます。しかも実行時にもEclipseのコンソールには、人を不安におとしいれるような警告は出力されません。MSDEはMicrosoft SQL Server 2000の同等品なので、Microsoft SQL Server 2000でも同様に動くと考えてよいでしょう。
ではMicrosoft SQL Server 2000では、AndroidのJavaアプリケーションからJDBCを使って安心してデータベースアクセスを実現できるのかというと、それはよく分かりません。少なくとも、MicrosoftのこのJDBCドライバが、Android、すなわちDelvik環境で動作することを前提に開発されていないことは確かです。コンパイルでエラーが出ないから、動作に問題が起きないかは、みなさんの経験で判断してください。
SQL Server 2000では動作するがSQL Server 2007では接続できない
ちなみにMicrosoft SQL Server 2008では、データベースサーバーへのユーザー認証にSSLを使っているらしく、その旨のエラーメッセージが表示され、サンプルプログラムから接続ができませんでした。Microsoft SQL Server 2005で、どのような結果になるのかは試していません。
もちろんOracleについても触れなければならないでしょう。Oracleからは膨大な数のJDBCドライバが提供されています。私は最近のOracle製品に関して、あまり明るくないので、適当に選んで試したところ、どのJDBCドライバも使用不可能でした。だが、インターネットの検索ではうまくいっている事例も散見されるので、JDBCの選び方が悪いか、あるいは指定の仕方が間違っているのでしょう。
Oracleのデータベースサーバーは日本の企業システムにとって最重要なデータベースサーバーですので、このあたりの検証はもう少し進めたいと考えています。
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.microsoft.sqlserver.jdbc.SQLServerDriver");
//データベースに接続
conn = DriverManager.getConnection("jdbc:sqlserver://10.0.2.2:1433;databaseName=pubs;user=sa;password=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());
}
}
}
