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とテーブルの作成から。