拙著『Webアプリケーション構築入門』では、ウェブアプリの簡単な例として、郵便番号検索システムを、Javaを使って構築しています。(改訂版)
ウェブアプリに関してはもう1冊著書があります。『Microsoft Visual Web Developer 2008 Express Edition入門』です。こちらはASP.NET(C#あるいはVisual Basic)なのですが、『Webアプリケーション構築入門』で作成した程度の簡単な郵便番号検索システムなら、こちらのほうが簡単に構築できます。
しかし、郵便番号データをSQL Server Express Editionで使えるようにするのが少し面倒なので、その方法を紹介します。(この点に関して言えば、SQL Server Express EditionよりもMySQLのほうがはるかに簡単です。)
まず、郵便番号データをダウンロードします。「読み仮名データの促音・拗音を小書きで表記するもの」の「全国一括」でいいでしょう。ダウンロードしたファイルを展開し、テキストファイル内の二重引用符を削除し、カンマをタブに置き換えておきます(後述のformat.fmtの「\t」を「,」にするなら、カンマの変換は実は不要です)。
Visual Web Developer(VWD, Visual Studioのウェブアプリ用無償版)上では、大量のデータを読み込むためのBULK INSERT文が(たぶん)使えないので、SQL Server Management Studioでデータベースとテーブルを作り、それをVWDで使うことにします。
データベースを作ります。
データベース名は「mydb」にしましょう。
GUIでテーブルを作るのは面倒なので、SQLを使います。
実行するSQLはこんな感じです。
USE [mydb] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[zips]( [jis] [char](10) NOT NULL, [old_zip] [char](5) NOT NULL, [zip] [char](7) NOT NULL, [addr1_ruby] [ntext] NOT NULL, [addr2_ruby] [ntext] NOT NULL, [addr3_ruby] [ntext] NOT NULL, [addr1] [ntext] NOT NULL, [addr2] [ntext] NOT NULL, [addr3] [ntext] NOT NULL, [establishment_ruby] [ntext] NOT NULL, [establishment] [ntext] NOT NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[zips] ADD CONSTRAINT [DF_zips_jis] DEFAULT ('') FOR [jis] GO ALTER TABLE [dbo].[zips] ADD CONSTRAINT [DF_zips_addr1_ruby] DEFAULT ('') FOR [addr1_ruby] GO ALTER TABLE [dbo].[zips] ADD CONSTRAINT [DF_zips_addr1] DEFAULT ('') FOR [addr1] GO ALTER TABLE [dbo].[zips] ADD CONSTRAINT [DF_establishment_ruby] DEFAULT ('') FOR [establishment_ruby] GO ALTER TABLE [dbo].[zips] ADD CONSTRAINT [DF_establishment] DEFAULT ('') FOR [establishment] GO
貼り付けて、右クリック→実行。
できたテーブルは「デザイン」で確認できます。
実は、先にあげたSQL文は、GULで作ったテーブルを「スクリプト化」したものです。(GUIは説明には不向きです。)
テーブルができたので、テキストファイルのデータをテーブルにロードします。
まず、テキストファイルとテーブルの対応関係を記述したファイルformat.fmtを用意します。(ファイルの書き方・SQLCHAR等について)
format.fmt 10.0 10 1 SQLCHAR 0 10 "\t" 1 jis "" 2 SQLCHAR 0 5 "\t" 2 old_zip "" 3 SQLCHAR 0 7 "\t" 3 zip "" 4 SQLCHAR 0 500 "\t" 4 addr1_ruby "" 5 SQLCHAR 0 500 "\t" 5 addr2_ruby "" 6 SQLCHAR 0 500 "\t" 6 addr3_ruby "" 7 SQLCHAR 0 500 "\t" 7 addr1 "" 8 SQLCHAR 0 500 "\t" 8 addr2 "" 9 SQLCHAR 0 500 "\t" 9 addr3 "" 10 SQLCHAR 0 500 "\r\n" 0 dummy ""
BULK INSERT文で郵便番号データを読み込みます。(参考:BULK INSERT文の詳細)。
BULK INSERT [dbo].[zips] FROM 't:\KEN_ALL_CP932.TSV' WITH(FORMATFILE='t:\format.fmt',CODEPAGE=932)
データを読み込み終わったら、データベースを「デタッチ」します。
このデータベースのファイルmydb.mdfをVWDのソリューション・エクスプローラでフォルダApp Dataにドラッグ&ドロップすれば、ウェブアプリから利用できます。
完成したデータベースのファイルmydb.mdf。
「郵便番号検索システムの作成(ASP.NETチュートリアル)」に続く
すばらしいチュートリアルありがとうございます。感謝です。