MySQLを利用して英和辞書アプリケーションを作成してみよう。

準備

1.辞書データとして、クジラハンドさんが提供してくれている著作権フリーの英和辞書(TSVファイル)を準備する。(下から同一のものをダウンロードできる)


2.解凍してejdic-hand-utf8.txtをテキストエディターで開いてみよう。
英単語と意味がタブ区切りで並ぶTSVファイルであることがわかる。

3.このファイルをもとにDBを作成しよう。まずはMySQLに以下のコマンド打ちejwordデータベースを作成する。

CREATE DATABASE ejword
DEFAULT CHARACTER SET utf8;

4.wordsテーブルを以下のように作成。

CREATE TABLE words(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
body text
);

5.エクリプスで新規動的プロジェクトを作成しプロジェクト名をejwordとする。
6.プロジェクトの直下にassetsフォルダを新規に作成し、そこにejdic-hand-utf8.txtを貼り付ける。

DBにインサート

7.WEB-INF/libの中にjdbcを貼り付ける(詳しくはこちらの記事参照)

8.Java Resources/srcフォルダの下にutilパッケージを作成し、その中にCreateDB.javaを以下のように作成する。(Servletではなく、mainメソッドのある普通のクラスである点に注意)
●util.CreateDB.java

package util;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class CreateDB {
	//メインメソッド
	public static void main(String[] args) {
		try {
			//ファイル読み込み
			FileInputStream fis = new FileInputStream("assets/ejdic-hand-utf8.txt");
			InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
			BufferedReader br = new BufferedReader(isr);
			
			//データソースを利用せずダイレクトに接続する。
			Class.forName("com.mysql.jdbc.Driver");
			String url="jdbc:mysql://localhost:3306/ejword?useUnicode=true&characterEncoding=utf8";
			String user = "root";
			String pass = "root";
			Connection db = DriverManager.getConnection(url, user, pass);
			
			//トランザクション処理開始
			db.setAutoCommit(false);
			PreparedStatement ps = db.prepareStatement("INSERT INTO words(title,body) VALUES(?,?)");
			String line;
			while ((line = br.readLine()) != null) {
				//1行毎にデータを登録していく
				String[] vals = line.split("\t");
				ps.setString(1, vals[0]);
				ps.setString(2, vals[1]);
				ps.executeUpdate();
			}
			//例外が発生しなければcommit(確定)
			db.commit();
			db.close();
			br.close();
			//時間がかかる処理なのでコンソールで終了を伝える。
			System.out.println("done!");
		} catch (IOException | SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

9.ConnectDB.javaをJavaアプリケーションとして実行しよう。コンソールにdone!と表示され、DBにデータが入っていれば成功だ。