郵便番号のデータベース作成・その2

「その1」で作成したSQLite作成プログラムには欠点がある。
「その1」のSQLiteのプログラムの中には項目の中にキーが設定されていない。このままでは「その1」のプログラムを複数回実行すれば同じ郵便番号が複数存在出来てしまう。つまり設定が間違っている。
SQLiteに限らず全てのSQLにはデータの重複を防ぐキーを設定することが出来る。今回はそれを踏まえて重複しないように修正する。(「その1」のプログラムを複数回実行すればエラーが発生するが強制終了せずに継続させれば同一データが複数登録されてしまう。)
SQLの資料を検索するとキー設定という重複を防ぐ説明がすぐに見つかるのでSQLiteでテータ作成するときにキーを付けることが出来れば郵便番号データの重複が防止出来る。形式的には次のようになる。

CREATE TABLE テーブル名
(項目名1 INTEGER UNIQUE,
項目名2 INTEGER,
項目名3 TEXT,
項目名4 DATE);

キーの設定は項目名の後ろに「UNIQUE」を加える事で設定することが出来る。(郵便番号データではINTEGER(数値)・DATE(日付)形式は使用しない。)

データベースにどの項目は「その1」と同じ。

1.郵便番号(7桁)…… 半角文字列
2.都道府県名 ………… 漢字(コード順に掲載)
3.市区町村名 ………… 漢字(コード順に掲載)
4.町域名 ……………… 漢字(五十音順に掲載)

必要なのは、この4つの項目となる。

作るのはデータベースの枠と郵便データのテーブル。データベースの枠はそのまま使用するのでデータベース名はそのまま。

データベース名=test01

新テーブル名 =ubin

比較するために前回作成したyubinテーブルはそのまま残しておく。

現在、元の郵便番号データに重複しているデータが存在している為、途中で数回エラーが発生しています。エラーが発生したら「続ける」を選択してください。ちゃんと郵便番号テーブルが作成されます。(現在対応策を調査中)
郵便番号データは比較的件数の少ない県のデータを使う事をお勧めします。

——————————ここから

//
// 郵便番号SQL作成02
//
// プロデルからSQLiteデータベースを操作する例 //
//SQLiteを利用するには、System.Data.SQLite.dllが必要です
「Produire.Data.SQLite.dll」を利用する

SQLiteというSQLiteデータベースを作る
SQLiteのデータソースを、「test01.db」に変える
SQLiteへ接続する

//CSVファイルをデータ表に読み込み保存されているデータを取得。
データ表を作ってデータとする
データへ「data.csv」から読み込む  // 好きな都道府県の郵便番号データを使用してください。
一覧は、データの一覧
カウント=0
テーブルを、作成する // テーブルを作成します

データの一覧のすべての【行要素】についてそれぞれ繰り返す
     カウント=カウント+1  //行要素で良いはずなのですがエラーが出るのでカウントを作ります。
     レコードは、一覧(カウント)  //一覧にCSVデータを読み込みます
     //レコードを報告する
     郵便番号は、レコード(3)// 郵便番号7ケタ (キーとして使用する)
     都道府県は、レコード(7)//都道府県・漢字
     市町村は、レコード(8)//市町村・漢字
     町名は、レコード(9)//町名・漢字

     //SQLiteにデータを書き込みます
     データを、追加する

繰り返し終わり

//最後に作成したデータをSQLiteで読み込んで表示します
データを、取得する

テーブルを、作成する手順
     ーーテーブルの作成 テーブル名 ubin
     //1.ycode1 =郵便番号 キーとして使用
     SQLiteで「CREATE TABLE ubin2 (
          ycode1 TEXT UNIQUE,
          ken TEXT,
          city TEXT,
          machi TEXT)」を実行する
終わり

データを、取得する手順
     ーーデータの取得
     SQLiteから「SELECT * FROM ubin2」を取得して結果とする
     「初期状態」として結果の内容を情報アイコンで表示する
終わり

データを、追加する手順
     ーーデータの追加
     SQL文は、「INSERT INTO ubin2 (ycode1,ken,city,machi) VALUES(?,?,?,?);」
     バインド値は、{郵便番号,都道府県,市町村,町名}
     //バインド値を報告する
     SQL文をバインド値としてSQLiteで実行する

終わり

——————————ここまで

投稿者:

こきりこ

その辺に居る、ダメなおじさんです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください