Java入門ガイド

11.Java入門(MySQL入門編)

当コーナーはJavaの基本的な事項を紹介していくものです。

MySQL入門

MySQLは無償で入手できる扱いやすい軽快な RDBMS(リレーショナルデータベース管理システム)です。 最大の特徴は検索の高速性に重点を絞った設計になっていることで、商用RDBMSに比べ、処理を遅くする機構を大幅に省いた反面、大量のデータを高速に検 索することができます。

MySQLのインストール

MySQLを使うにはインストールする必要があります。 以下のサイトからMySQL5.6.21をダウンロードします。(Windows (x86, 32-bit), MSI Installerです。)
http://dev.mysql.com/downloads/windows/installer/5.6.html
ダウンロードが終わったら次はインストールしましょう

MySQL_SetUp01

「Next」を押します。

MySQL_SetUp02

Typicalにチェックを入れ「Next」を押します。

MySQL_SetUp03

「Finish」を押します。

MySQL_SetUp04

「Detailed Configuration 」にチェックを入れ「Next」を押します。

MySQL_SetUp05

「Developer Machine 」にチェックを入れ「Next」を押します。

MySQL_SetUp06

「Multifunctional Database」にチェックを入れ「Next」を押します。

MySQL_SetUp07

「Next」を押します。

MySQL_SetUp08

「Decision Support(DSS)/OLAP」にチェックを入れ 「Next」を押します。

MySQL_SetUp09

「Next」を押します。

MySQL_SetUp10

とりあえず今は「sjis」に設定して「Next」を押し ます。

MySQL_SetUp11

「Install As Windows Service」と「Include Bin Directory in Windows PATH」にチェックを入れ「Next」を押します。

MySQL_SetUp12

パスワードを設定し「Next」を押します。
(ここではパスワードは「root」と設定。またユーザー名は「root」になります)

MySQL_SetUp13

「Execute」を押し「finish」を押したら終了 です。

次にmy.iniに以下の項目を追加します。

[mysqld]
default-character-set=sjis
[client]
default-character-set=sjis
[mysql]
default-character-set=sjis
[mysqldump]
default-character-set=sjis

MySQLの起動

「スタート」→「プログラム」→「MySQL」→ 「MySQL Command Line Client」を選択

MySQL_SetUp14

先ほど設定したパスワードを入力します。
次にデータベースを作成します。「create database Sample_db;」と入力し「Enterキー」を押します

MySQL_SetUp15

これでデータベースが作成できました。次にテーブルを作成 します。

「create table Sample_db.Sample_table( name varchar(10),bloodType varchar(2),age int(3));」 と入力し「Enterキー」を押します。

MySQL_SetUp16

続いて作成したテーブルにデータを登録します
insert into Sample_db.Sample_table(name,bloodType,age) values(“アイオス”,”B”,”1″);」と入力します。

MySQL_SetUp17

次にテーブルのデータを表示します。
「select name,bloodType,age from Sample_db.Sample_table;」と入力します。

MySQL_SetUp18

JDBCドライバについて

JavaでDBのデータを取得するには、JDBCドライ バをインストールする必要があります 以下のサイトからzipファイルをダウンロードして下さい。 http://dev.mysql.com/downloads/connector/j

・Select Platformを「Platform Independent」に変更し、Platform Independent (Architecture Independent), ZIP Archive側をダウンロードします。
・サインインを聞かれますがサインインしない場合は「No thanks, just start my download.」からのリンクでダウンロード可能です。

解凍したらmysql-connector-java-X.X.XX(Xはバージョンです。)のフォルダをC:直下などに配置します。
次にEclipseでプロジェクトを作成します。
プロジェクトを右クリックして「ビルドパス」→「ビルドパスの構成」を選択します。

MySQL_SetUp19

「ライブラリー」を選択し「外部JARの追加」を押します。

MySQL_SetUp20

mysql-connector-java-X.X.XXフォルダを指定します。
「mysql-connector-java-X.X.XX-bin.jar」を選択し「開く」を押します。

MySQL_SetUp21

「ライブラリー」に追加されたのを確認し「OK」を押します。
次にJavaからDBのデータを取得します。
クラス名;Sample.java(bizパッケージ)

/* 
 * クラス名 :Sample.java 
 * 
 * 作成日  :2007/09/07
 * 作成者  :アイオステクノロジー 
 * 最終更新日:2007/09/07
 * 最終更新者:アイオステクノロジー 
 * 
 */ 

package biz;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Sample {

    public static void main(String[] args) {

        Connection con = null;

        PreparedStatement ps = null;

        try {

            // ドライバクラスをロード
            Class.forName("com.mysql.jdbc.Driver");

            // データベースへ接続
            con = DriverManager.getConnection("jdbc:mysql://localhost/Sample_db","root","root");

            // name,bloodType,ageのデータを検索するSQL文を作成
            String sql = "select name,bloodType,age from Sample_Table";

            // ステートメントオブジェクトを生成
            ps = con.prepareStatement(sql);

            // クエリーを実行して結果セットを取得
            ResultSet rs = ps.executeQuery();

            // 検索された行数分ループ
            while(rs.next()) {

                // nameデータを取得
                String name = rs.getString("name");
                // bloodTypeデータを取得
                String bloodType = rs.getString("bloodType");
                // ageデータを取得
                String age = rs.getString("age");

                // データの表示
                System.out.println("name;"+" "+name);
                System.out.println("bloodType;"+" "+bloodType );
                System.out.println("age;"+" "+age );
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {

                // close処理
                if(ps != null){
                    ps.close();
                }

                // close処理
                if(con != null){
                    con.close();
                }
            } catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
}

実行結果は以下のとおりです。

MySQL_SetUp22

エスケープ処理

「CREATE TABLE JUICE (NAME varchar(30) ,PRICE int );」と入力し、ジューステーブルを作成しました。 「ぶどう100%」をジュースの名前の条件にして、ジュースを検索してみます。
そのまま「ぶどう100%」を検索条件にすると、「%」が「0文字以上の任意の文字列」と認識されてしまいます。
そこで「ぶどう100%」で検索できるよう、エスケープ処理を行います。
クラス名;Sample2.java

/* 
 * クラス名 :Sample2.java 
 * 
 * 作成日  :2007/09/07
 * 作成者  :アイオステクノロジー 
 * 最終更新日:2007/09/07
 * 最終更新者:アイオステクノロジー 
 * 
 */ 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Sample2 {
    public static void main(String[] args) {

        String searchWord = "ぶどう100%";
        // ここでエスケープ処理を行い、%を\%に置き換えます
        searchWord = searchWord.replaceAll("%", "\\\\%");

        Connection con = null;

        PreparedStatement ps = null;

        try {

            // ドライバクラスをロード
            Class.forName("com.mysql.jdbc.Driver");

            // データベースへ接続
            con = DriverManager.getConnection(
                    "jdbc:mysql://localhost/Sampledb?characterEncoding=utf8", "root", "root");

            // name,bloodType,ageのデータを検索するSQL文を作成
            String sql = "SELECT NAME , PRICE FROM JUICE WHERE NAME like ? ";

            // ステートメントオブジェクトを生成
            ps = con.prepareStatement(sql);

            ps.setString(1, searchWord);

            // クエリーを実行して結果セットを取得
            ResultSet rs = ps.executeQuery();

            // 検索された行数分ループ
            while (rs.next()) {

                // nameデータを取得
                String name = rs.getString("NAME");
                // bloodTypeデータを取得
                int price = rs.getInt("PRICE");

                // データの表示
                System.out.println("name;" + " " + name);
                System.out.println("price;" + " " + price);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {

                // close処理
                if (ps != null) {
                    ps.close();
                }

                // close処理
                if (con != null) {
                    con.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

実行結果は以下のとおりです。

エスケープ処理なし

Escape_not_use

エスケープ処理あり

Escape_use