SHOEISHA iD

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

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

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

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

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

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


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のデータベースサーバーは日本の企業システムにとって最重要なデータベースサーバーですので、このあたりの検証はもう少し進めたいと考えています。

リスト5-1 SQL Serverにアクセスするためのサンプルプログラムの全文
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());
        }
    }
}

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Androidを使ったクライアント/サーバー・データベースシステム連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー