Transcript ppt

データベースを使ったプログラミング
~JDBCを使ってみよう~
深澤 洋介(環4)
&CreW project
今日の資料

http://www.sfc.keio.ac.jp/~t00815yf/crew/
今日の目標
Javaのプログラムからデータベースを使える
ようになる
– JDBCとは何か、説明できる
– JDBCを使えるようになる
1.前回のおさらい
データベースとSQL
前回のおさらい

データベースとは何か?
– データベース(DB)、データベースシステム、データ
ベースマネジメントシステム(DBMS)の関係は?
データベースシステム =DB+DBMS
DBMS
DBを管理するもの
管理
DB
データの集まり
前回のおさらい

データベースを使う利点は?
– データの処理をいちいち記述しなくて済む
(SQLで指示を出すだけ)
– データを格納するルールが決まっている
– 処理速度が速い
前回のおさらい

SQLって何?
– リレーショナルデータベース(RDB)からデータを出し入
れする際の共通語
DBMSの種類に依存するこ
となくDBを操作できる
話し手
SQL
SQL
SQL
SQL
MySQL
DBMS
PostgreSQL
DBMS
Oracle
DBMS
InterBase
DBMS
MySQL
PostgreSQL
Oracle
InterBase
実習-MySQLとSQL前回の復習を兼ねて、今回のサブゼミ用
のDBを作成します。
 覚えるためには手を動かすのが一番!!

作成するデータベース
データベース名:questionbbs
 テーブル名:questiondata
 フィールド

– department,grade,contributor,login,title,content,dateの7
つ。
– 属性はすべてtextです。
+--------------+-------+-------------+----------+-----------------+-----------------------------------+------------------------------+
| department
| grade | contributor | login
| title
| content
| date
|
+--------------+-------+-------------+----------+-----------------+-----------------------------------+------------------------------+
| 環境情報学部 | 4年
| 深澤洋介
| t00815yf | Servletの参考書 | オススメの参考書ありませんか?
| Sun Wed 08 15:09:25 JST 2003 |
+--------------+-------+-------------+----------+-----------------+-----------------------------------+------------------------------+
※サブゼミ疑問解決掲示板に合わせてあります。
MySQLの起動

サーバーの起動
> mysqld-max --standalone(win95&98)
> mysqld-max-nt --standalone(win2000&XP)

クライアントの起動
> mysql
データベースの作成
データベースの作成
mysql> create database questionbbs;
 データベースの一覧参照
mysql> show databases;
 データベースの選択
mysql> use questionbbs;

テーブルの作成

テーブルの作成
mysql> create table questiondata(
department text,
grade text,
contributor text,
login text,
title text,
content text,
date text
);
データの挿入

データの挿入
mysql> insert into questiondata values(
‘環境情報学部’,
‘4年’,
‘深澤洋介’,
‘t00815yf’,
‘Servletの参考書’,
‘オススメの参考書ありませんか?’,
‘Sun Wed 08 15:09:25 JST 2003’
);
データの検索

テーブル内の全てのデータを検索
mysql> select * from questiondata;
+--------------+-------+-------------+----------+-----------------+-----------------------------------+------------------------------+
| department
| grade | contributor | login
| title
| content
| date
|
+--------------+-------+-------------+----------+-----------------+-----------------------------------+------------------------------+
| 環境情報学部 | 4年
| 深澤洋介
| t00815yf | Servletの参考書 | オススメの参考書ありませんか?
| Sun Wed 08 15:09:25 JST 2003 |
+--------------+-------+-------------+----------+-----------------+-----------------------------------+------------------------------+
※実際には一行が長すぎて綺麗に表示されません…(データ自体は正常なのでOK)
2.JDBC
Javaのプログラムからデータベース
を使えるようになろう
JDBCとJDBCドライバ

JDBC
– JavaからDBMSへ接続するためのAPI(部品群)

JDBCドライバ
– JavaプログラムとDBMSを繋ぐドライバ
JDBCとJDBCドライバ
Javaプログラム
JDBC
JDBCドライバを使うこと
で、どのDBMSに接続し
ているかを気にしないで
プログラムが書ける。
JDBCドライバ
MySQL
DBMS
PostgreSQL
DBMS
Oracle
DBMS
InterBase
DBMS
MySQL
PostgresSQL
Oracle
InterBase
実習

イメージを掴むために実際にプログラムを
動かしてみよう。
JDBCドライバのインストール
JDBCドライバをダウンロード。
 mm.mysql-2.0.14-bin.lzhを解凍する。
 その中にあるmm.mysql-2.0.14-bin.jarファ
イルを…

– A.クラスパスに加える。
– B.JDKをインストールしたディレクトリ/jre/lib/ext/以下
に置く。
例)c:\jdk1.4/jre/lib/ext/

A. B.いずれかでOK。
サンプルを動かしてみよう

サンプルプログラム
– ViewQuestions.java(投稿データを表示する)
– ContributeQuestion.java(新しく投稿する)
※今回はコンソール(ex.DOSプロンプト)で動作する
プログラムです。
ソースコードを見ながら解説
まずはViewQuestions.javaから。
 コンパイルが通ったら実行してみよう。

>Javac ViewQuestions.java(リターン)
>java ViewQuestions(リターン)
データベースに接続中...
-----------------------------投稿者:深澤洋介(t00815yf)
学部:環境情報学部/学年:4年
-----
タイトル:Servletの参考書(Sun Wed 08 15:09:25 JST 2003)
疑問の内容:分かりやすいServletの参考書ありませんか?
------------------------------
JDBCをimportする

Java.sqlパッケージをimportします。
Import java.sql.*;
JDBCドライバを読み込む

Class.forNameメソッドで利用したいJDBCド
ライバを読み込みます。今回はMySQL用
のJDBCドライバです。
// JDBCドライバを読み込む
String jdbcDriver = "org.gjt.mm.mysql.Driver";
Class.forName(jdbcDriver);
今回登場するクラス

3つのクラス
– Connection : DBMSと接続するクラス
– Statement : SQL文を実行するクラス
– ResultSet : 結果を保持するクラス
DBMSに接続する

DBMSに接続するにはConnectionクラスを
使います。 DriverManager.getConnection()
メソッドからConnectionオブジェクトを取得
し、以後はこのConnectionオブジェクトを通
してDBMSにアクセスします。
Connection conn =
DriverManager.getConnection(url,user,password)
JDBC URL

DBMSとの接続にはDBMS URLを指定す
る必要があります。URLの指定方法は
データベースの種類によって異なります。
MySQLの場合
jdbc:mysql://[サーバ名]/[データベース名]
例)jdbc:mysql://localhost/questionbbs/
DBMSとの接続を終了する

DBMSを使い終わったら、close()メソッドを
実行して接続を終了します。
conn.close();
SQL文を実行するステートメント
を作成する

SQL文を実行して結果を受け取るには
Statementクラスを使います。Connectionク
ラスのcreateStatement()メソッドから
Statementオブジェクトを取得します。
// SQL文を実行するステートメントを作成する
Statement statement = conn.createStatement();
ステートメントを閉じる

SQL文によるDBMSとのやり取りが終わっ
たらステートメントを閉じましょう。
statement.close();
SQL文を実行して結果を受け取る

StatementクラスのexecuteQuery()メソッドは、
SQL文を実行して、その結果(内容)を
ResultSetオブジェクトとして返します。
// SQL文を実行する
ResultSet questionData =
statement.executeQuery(sqlString);
ResultSet
SQLの結果を表の形で保持しています。
 管理は行単位で行ないます。

カーソル
grade
contributor
title
4年
深澤洋介
Servletの参考書
4年
岸健司
web.xmlの書き方
4年
川勝名奈恵
データベースって何ですか
カーソルで今どの行を扱っているかを示します。
ResultSet

next()メソッド
– カーソルを次の行へ移動してtrueを返します。次の行
が存在しない場合はfalseを返します。
grade
contributor
title
4年
深澤洋介
Servletの参考書
岸健司
web.xmlの書き方
川勝名奈恵
データベースって何ですか
(1)
4年
(2)
4年
(3)
(1) resultSet.next(); →カーソルが次の行へ
(2) resultSet.next(); →カーソルが次の行へ
(3) resultSet.next(); →次の行が存在しないのでfalseを返す。
ResultSet

getString()メソッド
– 現在の行から、引数(フィールド名)で指定された列の
値をStringとして返します。
grade
contributor
title
4年
深澤洋介
Servletの参考書
4年
岸健司
web.xmlの書き方
4年
川勝名奈恵
データベースって何ですか
String hogehoge = resultSet.getString(“contributor”);
→hogehogeには“深澤洋介”が入る。
ソースコードを見ながら解説

お次はContributeQuestion.javaです。

まずは実行してみよう。
SQL文を実行して結果を受け取る

StatementクラスのexecuteUpdate()メソッド
はSQL文を実行して、結果をintで返します。
// SQL文を実行する
result = statement.executeUpdate(sqlString);
executeQuery()と
executeUpdate()

executeQuery():select文に用いる。
– 結果(実際のデータ)が欲しい。
» ResultSetオブジェクトを返す。

executeUpdate():insert文、update文、delete
文に用いる。
– 結果の取得が目的ではない。
» insert文、update文、delete文は行数が返ってくる。
何も返さないSQL文の場合は0が返ってくる。
まとめ
JDBC

3つの大事なクラス
– Connection : DBMSと接続するクラス
– Statement : SQL文を実行するクラス
– ResultSet : 結果を保持するクラス
JDBCとJDBCドライバ
Javaプログラム
JDBC
JDBCドライバを使うこと
で、どのDBMSに接続し
ているかを気にしないで
プログラムが書ける。
JDBCドライバ
MySQL
DBMS
PostgreSQL
DBMS
Oracle
DBMS
InterBase
DBMS
MySQL
PostgresSQL
Oracle
InterBase
JDBCとJDBCドライバが
無かったら…
MySQL用
Javaプログラム
postgreSQL用
Javaプログラム
Oracle用
Javaプログラム
InterBase用
Javaプログラム
4種類のプログラムを書かなくてはならない
MySQL
DBMS
PostgreSQL
DBMS
Oracle
DBMS
InterBase
DBMS
MySQL
PostgresSQL
Oracle
InterBase
実習

サブゼミ疑問解決掲示板をDB対応にして
みよう。
– 今まではファイルに保存していました。
– その部分をDB向けに書き換えれば…

余力のある人は、自分が作っていたwebア
プリをDB対応にしてみよう。
– まずはDBとテーブルの作成から。