データベースを使ったプログラミング ~JDBCを使ってみよう~ 深澤 洋介(環4) &CreW project
今日の資料 http://www.sfc.keio.ac.jp/~t00815yf/crew/
今日の目標 Javaのプログラムからデータベースを使えるようになる JDBCとは何か、説明できる JDBCを使えるようになる
1.前回のおさらい データベースとSQL
前回のおさらい データベースとは何か? データベース(DB)、データベースシステム、データベースマネジメントシステム(DBMS)の関係は? 管理 DB データの集まり
前回のおさらい データベースを使う利点は? データの処理をいちいち記述しなくて済む(SQLで指示を出すだけ) データを格納するルールが決まっている 処理速度が速い
前回のおさらい SQLって何? リレーショナルデータベース(RDB)からデータを出し入れする際の共通語 話し手 SQL SQL SQL DBMSの種類に依存することなくDBを操作できる 話し手 SQL SQL SQL SQL MySQL DBMS 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)
Javaのプログラムからデータベースを使えるようになろう 2.JDBC Javaのプログラムからデータベースを使えるようになろう
JDBCとJDBCドライバ JDBC JDBCドライバ JavaからDBMSへ接続するためのAPI(部品群)
JDBCドライバを使うことで、どのDBMSに接続しているかを気にしないでプログラムが書ける。 JDBCとJDBCドライバ JDBCドライバを使うことで、どのDBMSに接続しているかを気にしないでプログラムが書ける。 Javaプログラム JDBC 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の参考書 岸健司 web.xmlの書き方 川勝名奈恵 データベースって何ですか カーソル カーソルで今どの行を扱っているかを示します。
ResultSet next()メソッド カーソルを次の行へ移動してtrueを返します。次の行が存在しない場合はfalseを返します。 grade contributor title 4年 深澤洋介 Servletの参考書 岸健司 web.xmlの書き方 川勝名奈恵 データベースって何ですか (1) (2) (3) (1) resultSet.next(); →カーソルが次の行へ (2) resultSet.next(); →カーソルが次の行へ (3) resultSet.next(); →次の行が存在しないのでfalseを返す。
ResultSet getString()メソッド 現在の行から、引数(フィールド名)で指定された列の値をStringとして返します。 grade contributor title 4年 深澤洋介 Servletの参考書 岸健司 web.xmlの書き方 川勝名奈恵 データベースって何ですか String hogehoge = resultSet.getString(“contributor”); →hogehogeには“深澤洋介”が入る。
ソースコードを見ながら解説 お次はContributeQuestion.javaです。 まずは実行してみよう。
result = statement.executeUpdate(sqlString); 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ドライバを使うことで、どのDBMSに接続しているかを気にしないでプログラムが書ける。 JDBCとJDBCドライバ JDBCドライバを使うことで、どのDBMSに接続しているかを気にしないでプログラムが書ける。 Javaプログラム JDBC 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対応にしてみよう。 余力のある人は、自分が作っていたwebアプリをDB対応にしてみよう。 今まではファイルに保存していました。 その部分をDB向けに書き換えれば… 余力のある人は、自分が作っていたwebアプリをDB対応にしてみよう。 まずはDBとテーブルの作成から。