SQLite for Java on Heroku

拙著『Webアプリケーション構築入門 第2版』は、ウェブアプリ構築の入門書です。サーバ・サイドプログラムは、JavaとPHPで作成しており、読者は自分の好きな方を選んで読み進められるようになっています。

PHPで作ったウェブアプリはレンタルサーバとかで簡単に公開できるけど、Javaで作ったウェブアプリはちょっと面倒でした。

しかし、HerokuならJavaが動くので、これを使えば簡単です。このことについて、かつて書きました。

しかし、確かにJavaは動きますが、データベース管理システムは拙著で採用したMySQLではなくPostgreSQLなので、PostgreSQLへの対応が必要です。このことについて、かつて書きました。

しかし、拙著のサンプルアプリである郵便番号検索システムのためのデータベースは比較的大きく、ウェブアプリをPostgreSQLに対応させただけでは、データのインポートが面倒で使えません。この問題は、Postgres dev planという無料のアドオンで解決するのが簡単です。このことについて、かつて書きました。

しかし、これだけ書いた後で、「Postgres dev planでは、1つのテーブルに1万行までしか入れられないようにする予定です」というアナウンスがありました。郵便番号データベースには、14万行以上のデータがあるので、Postgres dev planではダメになるわけです。

月9ドルのBasic planに移行すれば問題は解決するのですが、そんなものを学生に勧められるわけもなく、もう面倒くさいのでSQLiteを組み込んで使うことにします。さらばPostgreSQL。

必要な作業は3つです。

  1. データベースファイルの作成
  2. SQLiteのためのライブラリの導入
  3. データベースへの接続方法の修正

データベースファイルの作成

FirefoxのアドオンであるSQLite Managerを使うのが簡単です。

  • アドオンをインストールする
  • ツール→SQLite Manager
  • pom.xmlがあるのと同じディレクトリにmydb.sqliteを作成する
  • デーブルを作る
  • 郵便番号データをインポートする

テーブルは次のようなSQL文を実行して作成します。

CREATE TABLE zip (
  code CHAR(7) NOT NULL,
  address1 VARCHAR(10) DEFAULT '' NOT NULL,
  address2 TEXT NOT NULL,
  address3 TEXT NOT NULL,
  address4 TEXT NOT NULL,
  office TEXT NOT NULL
);

CREATE INDEX code_idx ON zip (code)

データのインポートには、以前作成した/tmp/zip.csvを使えばいいでしょう。

SQLiteのためのライブラリの導入

pom.xmlに、次のような要素を追記します。

<dependency>
  <groupId>org.xerial</groupId>
  <artifactId>sqlite-jdbc</artifactId>
  <version>3.7.2</version>
</dependency>

データベースへの接続方法の修正

zips.jspを次のように修正します。

//データベースに接続
Class.forName("org.sqlite.JDBC");
Connection conn=DriverManager.getConnection("jdbc:sqlite:mydb.sqlite");

あとは『Webアプリケーション構築入門』のウェブアプリをHeroku上で動かす方法と同じです。


動作例