SHOEISHA iD

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

連載記事

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

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
Androidを使ったクライアント/サーバー・データベースシステム

Android端末からのデータベースサーバーへのアクセスとグリッド表示

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルファイル (90.4 KB)

 前回、予告したように今回は私たちが作ったDBGrid for AndroidとJDBC Driver over HTTP for Androidの紹介です。これらのプログラミングコンポーネントは、すべてのソースコードが提供され、開発者は無償で生産物の再配布ができます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

Android端末でデータベースサーバーにアクセス

 前回、予告したように今回は私たちが作ったDBGrid for AndroidとJDBC Driver over HTTP for Androidの紹介です。これらのプログラミングコンポーネントは、すべてのソースコードが提供され、開発者は無償で生産物の再配布ができます。

 間違いのないように言っておくと、この記事はAndroid内蔵のデータベースSQLLiteを操作する方法を紹介するためのものではありません。OracleやMySQL、Microsoft SQL Serverといったデータベースサーバーに、Androidクライアントからアクセスする方法を解説するものです。

 データベースベンダーが提供するJDBCドライバは、Android機での動作を想定していないということは前回書きました。JDBC Driver over HTTP for Android(以下 JDBC for Android)は、現在のそのような状況下で、今すぐAndroid端末をクライアントとしてデータベースサーバーにアクセスするプログラムを開発するために提供されます。

 また、2010年12月時点で公開されているAndroidのデータベースプログラミング情報のほとんどは、表形式のデータ編集を扱っていません。それを実現するのがDBGrid for Androidです。このDBグリッドはJDBCのResultSetオブジェクトとの連結機能を持つため、2行のプログラムコードで結果セットの表示と編集が可能になります。

サンプルプログラムを構成するクラス群

 いきなりですが、サンプルプログラムを見てください。リスト1を実行した画面が図1です。今回提供するサンプルプログラムは以下のクラスから構成されます。

  • ExDBクラス(サンプルプログラム)
  • DBGridクラス(DBGrid for Android)
  • droidbクラス(サーバーコンポーネント)
  • Connectionクラス(以下 JDBC Driver over HTTP for Android)
  • ResultSetクラス
  • DriverManagerクラス
  • ResultSetMetaDataクラス
  • Statemenクラス

 リスト1は、ExDBクラスに含まれるプログラムコードの全文です。

データベースプログラミングをするには、どのクラスを修正すればいいのか

 最初のExDBクラスがデータベースプログラミングのサンプルプログラムです。読者がデータベースクライアントプログラムを作るときは、このExDBクラスを改変するとよいでしょう。これで最低限のデータベースプログラムは作成できます。ですが、2番目のDBGridクラスに実装されているDBGrid for Androidは、十分なプログラミングインターフェイスを備えていません。だから、実用になるプログラムを作ろうとしたら、このDBグリッドのソースを改変することが必須となります。

DBGrid for Androidはソースコードの改変で機能を変更可能

 DBGrid for Androidのソースコードはコメントを含め400行程度のものなので、それを理解してプログラミングすれば、データグリッド系のコンポーネントよりも柔軟なプログラミングが可能です。ゆえに私たちは、そのようなプログラミングスタイルを提案します。カプセル化することでプログラミングの柔軟性に制限を加える必要もないでしょう。

 大体、ちょっと高機能なデータグリッドコンポーネントのマニュアルは何百ページもあったりするので、それを習得する学習コストも決して少なくありません。本連載や私たちのホームページでも、DBGrid for Androidを改変するプログラミング情報を提供していきます。

サーバーコンポーネント

 droidbクラスは、Webサーバーに配置されるサーブレットです。JDBC for AndroidはWebブラウザのふりをして、このサーブレットにクライアントの要求を送信します。要求を受け取ったdroidbサーブレットは、通常のJDBCドライバをつかってデータベースにアクセスします。このクラスは、データベースプログラムを開発するためには、通常変更する必要はありません。

JDBC for Androidを実装するクラス

 Connectionクラス以降のクラスはJDBC for Androidの実装です。これらは不具合や機能不足がない限り、開発者は触れる必要はありません。データベースベンダーのJDBCドライバとの互換性を考えれば、勝手な機能拡張はしないほうがよいでしょう。とはいえ、JDBC for Androidも独自実装の部分はあります。例えばJDBC for Androidは、他のJDBCドライバと違い、ステートレスのHTTPを通じて動作します。そのためデータベースのロックができません。そこでデータ取得後から編集したデータを書き込むまでのあいだに、もし他のユーザーがデータを編集していたら、データベースへの変更を拒否する仕組みがあります。

 JDBC for Androidのクラスはソースコードの改変を前提としていないので、これらのクラスを別パッケージにして、データベースベンダーが提供するJDBCドライバと同様に扱ってもよいです。でも、せっかくソースコードもあるのだから、プロジェクトに組み込んだほうが見通しがよくてよいでしょう。それにそのほうがコンポーネントのバグに対する修正も早くなります。

できるだけ新しいサンプルを

 今回、提供するこれらのクラスが市販のコンポーネントのように、すんなり、今すぐ簡単に確実に使えるものだと想像しているならば、その期待は早く捨てた方がよいです。大体、今すぐにAndroid用のデータベースクライアントプログラムを書かなければいけないという人も多くはないでしょう。この連載が続いていく間に、つまり、そのようなプログラムを作らなければならなくなるころには、みなさんのスキルの向上も含め、十分に使えるようなものになっているはずです。

 また、もし今すぐにAndroid用のデータベースクライアントプログラムを作らないといけないとしても、他にいい選択肢もないはずです。苦労しても、これらのコンポーネントを使いこなす価値があることは約束します。少なくともスクラッチから書き起こすよりは、時間の節約になるはずです。

 これらのコンポーネントの最新情報は、次のWebページで提供します。

サンプルプログラムのダウンロード

 この記事のサンプルプログラムをダウンロードして実行するには、Webサーバー、データベースサーバー、およびデータベース(テーブルを含む)を用意する必要があります。またテーブルやデータベースサーバーに合わせて、サンプルプログラム(リスト1)の接続文字列やSELECTステートメントの内容を変える必要があります。

 ダウンロード可能なサンプルプログラムのインストール方法を説明する前に、次のページではデータベースプログラムの実装であるExDBクラス(リスト1)の内容を説明します。

図1 実行したExDBサンプルプログラム。DBGrid for AndroidとJDBC for Androidを使用しており、グリッド形式でデータ編集ができます。
図1 実行したExDBサンプルプログラム。DBGrid for AndroidとJDBC for Androidを使用しており、グリッド形式でデータ編集ができます。
リスト1 図1の実装であるExDBクラスの全コード
package exDB.jar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.Toast;

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

public class ExDB extends Activity  implements View.OnClickListener {
    public static Button cmdButton;
    public static EditText editText;
    private Connection conn;
    private ResultSet rSet = null;

    private DBGrid dBGrid;

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout linearLayout=new LinearLayout(this);
        linearLayout.setOrientation(linearLayout.VERTICAL);
        cmdButton = new Button(this);
        cmdButton.setText("バッチ更新");
        cmdButton.setHeight(15);
        cmdButton.setOnClickListener(this);
        try {
             //    Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/northwind;http://10.0.2.2/droiddb/servlet/jdbchttp", "user", "password");
            conn.setAutoCommit(false);
            rSet = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                        ResultSet.CONCUR_UPDATABLE)
                                        .executeQuery("SELECT CustomerID,CompanyName,ContactName,Address FROM Customers");
        } catch(Exception e) {
        }

        dBGrid = new DBGrid(this);
        dBGrid.ColumnTitleList = "ID,取引先名,担当者,住所";
        dBGrid.CreateGrid(rSet);

        linearLayout.addView(cmdButton);
        HorizontalScrollView hScrollView = new HorizontalScrollView(this);
        ScrollView scrollView = new ScrollView(this);
        hScrollView.addView(dBGrid);
        scrollView.addView(hScrollView);
        linearLayout.addView(scrollView);

        setContentView(linearLayout);
    }//onCreate(Bundle savedInstanceState)

     public void onClick(View view) {
         if (view==cmdButton) {
             //現在編集中の列をDBに反映させるため。
             dBGrid.update();
             conn.commit();
             Toast.makeText(this, "データの更新が完了しました", Toast.LENGTH_SHORT).show();
         }
    }//onClick(View view)
}

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
サンプルプログラムの機能

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Androidを使ったクライアント/サーバー・データベースシステム連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5618 2010/12/27 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  2. 2
    NVIDIA、コンパクトな生成AIスーパーコンピューターを発表 NEW
  3. 3
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  4. 4
    Linuxディストリビューション「Fedora Asahi Remix 41」リリース NEW
  5. 5
    ランサーズ、「2024年必要とされたスキルランキング」を公開。「Lancers」上のデータを集計
  1. 6
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 7
    「代替されない強み」を身に着ける覚悟はあるか──Java Champion 寺田佳央氏が経験してきた挫折とは
  3. 8
    IPA、DXの先進事例を素早く効率的に検索できるWebサイト「デジタル事例データベース」を公開
  4. 9
    「CUDA」 ~マンガでプログラミング用語解説
  5. 10
    Next.js 14までの進化を振り返る──App Routerを強化する新機能を解説! NEW

アクセスランキング

  1. 1
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  2. 2
    NVIDIA、コンパクトな生成AIスーパーコンピューターを発表 NEW
  3. 3
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  4. 4
    Linuxディストリビューション「Fedora Asahi Remix 41」リリース NEW
  5. 5
    ランサーズ、「2024年必要とされたスキルランキング」を公開。「Lancers」上のデータを集計
  6. 6
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  7. 7
    「代替されない強み」を身に着ける覚悟はあるか──Java Champion 寺田佳央氏が経験してきた挫折とは
  8. 8
    IPA、DXの先進事例を素早く効率的に検索できるWebサイト「デジタル事例データベース」を公開
  9. 9
    「CUDA」 ~マンガでプログラミング用語解説
  10. 10
    Next.js 14までの進化を振り返る──App Routerを強化する新機能を解説! NEW
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    ITエンジニア本大賞2025、投票締切直前! みんなで選んだ歴代の大賞本を振り返って一挙紹介
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    今後生成AIとどう向き合うべきなのか? 現場のエンジニアと研究者が最新研究事例から語り合う
  6. 6
    2024年12月に開催される注目のITエンジニア向けカンファレンス5選
  7. 7
    日本在住の英語を話すソフトウェア開発者、年収の中央値は950万円に
  8. 8
    Vue.js3.4~3.5の新機能をまとめて紹介! 新しいAPIやSSRの改善
  9. 9
    VSCodeをドキュメント作成に活用――テキストエディタ、Markdownエディタの設定と拡張機能を解説
  10. 10
    2024年の提示年収が高いプログラミング言語は? paiza調査によるランキングが発表

イベント

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

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

メールバックナンバー

アクセスランキング

  1. 1
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  2. 2
    NVIDIA、コンパクトな生成AIスーパーコンピューターを発表 NEW
  3. 3
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  4. 4
    Linuxディストリビューション「Fedora Asahi Remix 41」リリース NEW
  5. 5
    ランサーズ、「2024年必要とされたスキルランキング」を公開。「Lancers」上のデータを集計
  1. 6
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 7
    「代替されない強み」を身に着ける覚悟はあるか──Java Champion 寺田佳央氏が経験してきた挫折とは
  3. 8
    IPA、DXの先進事例を素早く効率的に検索できるWebサイト「デジタル事例データベース」を公開
  4. 9
    「CUDA」 ~マンガでプログラミング用語解説
  5. 10
    Next.js 14までの進化を振り返る──App Routerを強化する新機能を解説! NEW

アクセスランキング

  1. 1
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  2. 2
    NVIDIA、コンパクトな生成AIスーパーコンピューターを発表 NEW
  3. 3
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  4. 4
    Linuxディストリビューション「Fedora Asahi Remix 41」リリース NEW
  5. 5
    ランサーズ、「2024年必要とされたスキルランキング」を公開。「Lancers」上のデータを集計
  6. 6
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  7. 7
    「代替されない強み」を身に着ける覚悟はあるか──Java Champion 寺田佳央氏が経験してきた挫折とは
  8. 8
    IPA、DXの先進事例を素早く効率的に検索できるWebサイト「デジタル事例データベース」を公開
  9. 9
    「CUDA」 ~マンガでプログラミング用語解説
  10. 10
    Next.js 14までの進化を振り返る──App Routerを強化する新機能を解説! NEW
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    ITエンジニア本大賞2025、投票締切直前! みんなで選んだ歴代の大賞本を振り返って一挙紹介
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    今後生成AIとどう向き合うべきなのか? 現場のエンジニアと研究者が最新研究事例から語り合う
  6. 6
    2024年12月に開催される注目のITエンジニア向けカンファレンス5選
  7. 7
    日本在住の英語を話すソフトウェア開発者、年収の中央値は950万円に
  8. 8
    Vue.js3.4~3.5の新機能をまとめて紹介! 新しいAPIやSSRの改善
  9. 9
    VSCodeをドキュメント作成に活用――テキストエディタ、Markdownエディタの設定と拡張機能を解説
  10. 10
    2024年の提示年収が高いプログラミング言語は? paiza調査によるランキングが発表