2008年3月7日金曜日

Starting MySQL

いきなりですが,今日はWindows XPのパソコンにRDBMSを管理,運用するための実装のひとつであるMySQL(マイエスキューエル)をインストールしてみようと思います.※MySQLはスウェーデンの“MySQL AB”が保持していたオープンソースプロジェクトでしたが,2008年2月26日にサン・マイクロシステムズに買収されました.

★MySQLのインストールとサービス起動
MySQLのサイトでユーザ登録をしてダウンロードしたファイルをダブルクリック.

“MySQL Server Instance Configuration Wizard”では,つぎの項目にチェックを付けます(root password は忘れないように)

- Developer Machine
- Multifunctional Database
- Decision Support(DSS)/OLAP
- Enable TCP/IP Networking(Port Number:3306)
- Enable Strict Mode
- Best Support Multilingualism

つぎにMySQLをインストールしたフォルダにあるmy.iniのdefault-character-set の設定をつぎの値に編集します.

[client]
default-character-set=sjis
[mysqld]
default-character-set=utf8

サービスを起動するには,コマンドプロンプトから net start コマンドを実行します.

C:> net start MySQL

※上記はサービス名を“MySQL”でインストールした場合.

★MySQL用のJDBCドライバのインストール
MySQLのサイトからJDBCドライバをダウンロードして適切なフォルダ(“lib”や“common”)へコピーします.最新版ならmysql-connector-java-5.1.5.zip中のmysql-connector-java-5.1.5-bin.jarになります.

★データベースとユーザーの作成
まず,コマンドプロンプトからrootでmysqlコマンドラインクライアントを起動します.

c:\> mysql -u root -p******

※-pのすぐ後にパスワードを入力します.

データベース:eadb を作成.

mysql> CREATE DATABASE eadb;

作成したデータベース:eadb にユーザー名:teru が操作できるように設定.

mysql> GRANT ALL PRIVILEGES
-> ON eadb.*
-> TO teru@localhost
-> IDENTIFIED BY '******';

teru@localhostがユーザー名+アクセスするホスト名
IDENTIFIED BY '******'がパスワード

★データベース:eadb にテーブル:gakuseki_name を作成,データを挿入

mysql> use eadb;
mysql> DROP TABLE gakuseki_name;
mysql> CREATE TABLE gakuseki_name
-> (
-> id INTEGER AUTO_INCREMENT PRIMARY KEY,
-> gakuseki VARCHAR(10) UNIQUE,
-> name TEXT
-> );
-> INSERT INTO gakuseki_name (gakuseki,name) VALUES ('0001','teru');

★MySQLの操作

さっきのテーブル作成,データ挿入という一連の操作は,ファイルからインポートすることができます.

imp.sqlというファイルにつぎの操作を保存.
---
use eadb;
DROP TABLE gakuseki_name;
CREATE TABLE gakuseki_name
(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
gakuseki VARCHAR(10) UNIQUE,
name TEXT
);
INSERT INTO gakuseki_name (gakuseki,name) VALUES ('0001','teru');
-----

つぎのコマンドを実行することでインポートされます.

mysql> \. imp.sql


以降は,MySQLを操作するためによく使用されるコマンドを紹介します.

まず,テーブルを表示してみましょう.

mysql> select * from gakuseki_name;

つぎにデータベースを表示してみましょう.

mysql> show databases;

カレントデータベースの変更はつぎのとおり.

mysql> use eadb;

カレントデータベースのテーブルを表示.

mysql> show tables;

mysqlコマンドのヘルプ表示.

mysql> help

SQLコマンドのヘルプ表示(select や create など入力).

mysql> help SQLのコマンドを入力

mysqlクライアントの終了.

mysql> \q


mysqlコマンドは,PostgreSQLのコマンドと非常によく似ています.

あ,せっかくJDBCインストールしたんで,次回は javaプログラムでデータベースにあくせく,じゃなくて,アクセスしてみましょう.ちょっとサンプルを書いときますね(2行にまたがってるステートメントに注意!).

ViewTableJDBCTest.java
----

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

/*
* ViewTableJDBCTest.java
*/

/**
* @author : teru
*
MySQLのデータベース(eadb)にテーブルを作成
use eadb;
DROP TABLE gakuseki_name;
CREATE TABLE gakuseki_name
(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
gakuseki VARCHAR(10) UNIQUE,
name TEXT
);
INSERT INTO gakuseki_name (gakuseki,name)
VALUES ('0001','teru');

JDBCで必要なパラメータ
drv: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/eadb
usr: teru
pwd: ******

コンパイル
javac -classpath mysql-connector-java-5.1.5-bin.jar
ViewTableJDBCTest.java
実行
java -classpath mysql-connector-java-5.1.5-bin.jar;.
ViewTableJDBCTest

*/
public class ViewTableJDBCTest
{

public static void main(String args[])
{
Connection con = null;
PreparedStatement prepStmt = null;
try
{
// (1) データベースとの接続の確立
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/" +
"eadb?characterEncoding=UTF-8";
con = DriverManager.getConnection
(url, "teru", "******");

// (2) SQLの実行
String selectStatement =
"SELECT * " +
"FROM gakuseki_name";
prepStmt = con.prepareStatement(selectStatement);
ResultSet rs = prepStmt.executeQuery();

// (3) SQLの実行結果の処理
while (rs.next())
{
System.out.print(rs.getString
("gakuseki") + "\t");
System.out.print(rs.getString("name") );
}

// (4) 後始末
rs.close();
rs = null;
prepStmt.close();
prepStmt = null;
con.close();
con = null;

}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (prepStmt != null)
prepStmt.close();
}
catch (SQLException e)
{
e.printStackTrace();
}

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

0 件のコメント: