教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習
SQLの選択文を利用してデータベースの検索をおこなうには、 以下の手続きをとる必要がある。
次のプログラム JdbcTest7.java
は、
java JdbcTest7 ↓により、検索条件が与えられ、データの検索をおこなう。 このプログラムでは、fruitテーブルのpriceの値が100より 小さいレコードnameフィールドとpriceフィールドの値の一覧を 表示する。
import java.sql.*; public class JdbcTest7 { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/test_1"; String user = "root"; String password = "tuis2008system"; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT name, price FROM fruit WHERE price < 100"); while (rs.next()) { String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(name + " : " + price); } rs.close(); stmt.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } }
プログラム JdbcTest7.java の説明:
JdbcTest7.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。ユーザ名は"root"、パスワードは"tuis2008system" である。
まず、
import java.sql.*;では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。
Class.forName( "org.gjt.mm.mysql.Driver" );では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。
String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_1";では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、pcxxxx.edu.tuis.ac.jp上のtest_1データベースと接続することを あらわしている。
String user = ""; String password = "";では、データベースの接続に用いるユーザ名を指定しており、ここでは 匿名ユーザをあらわしている。その際のパスワードは設定しないことを あらわす。
conn = DriverManager.getConnection( url, user, password );では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。
Statement stmt = conn.createStatement();では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトmtを作成する。
ResultSet rs = stmt.executeQuery("SELECT name, price FROM fruit WHERE price < 100");では、Statementオブジェクトstmtに対してSQL文("SELECT name, price FROM fruit WHERE price < 100")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。 得られるResultSetオブジェクトrsには、executeQuery()メソッドにより 問い合わせをおこなった結果が格納される。
while( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(name + " : " + price); }では、ResultSetオブジェクトrsから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。
rs.close(); stmt.close(); conn.close();では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。
次のプログラム JdbcTest8.java
は、
java JdbcTest8 ↓により、複数の検索条件が与えられ、データの検索をおこなう。
import java.sql.*; public class JdbcTest8 { public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_1"; String user = ""; String password = ""; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT name, price FROM fruit WHERE price > 100 AND price < 200"); while ( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(name + " : " + price); } rs.close(); stmt.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } }
プログラム JdbcTest8.java の説明:
JdbcTest8.javaは、 pcxxxx.edu.tuis.ac.jpにあるデータベースサーバと 接続し、プログラムを実行する。ユーザ名は匿名ユーザ、パスワード は省略されている。
まず、
import java.sql.*;では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。
Class.forName( "org.gjt.mm.mysql.Driver" );では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。
String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_1";では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、pcxxxx.edu.tuis.ac.jp上のtest_1データベースと接続することを あらわしている。
String user = ""; String password = "";では、データベースの接続に用いるユーザ名を指定しており、ここでは 匿名ユーザをあらわしている。その際のパスワードは設定しないことを あらわす。
conn = DriverManager.getConnection( url, user, password );では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。
Statement stmt = conn.createStatement();では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。
ResultSet rs = stmt.executeQuery("SELECT name, price FROM fruit WHERE price > 100 AND price < 200");では、Statementオブジェクトstmtに対してSQL文("SELECT name, price FROM fruit WHERE price > 100 AND price <200")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。
ResultSetオブジェクトrsには、executeQuery()メソッドにより問い合わせを おこなった結果が格納される。
while( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(name + " : " + price); }では、ResultSetオブジェクトから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。
rs.close(); stmt.close(); conn.close();では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。
次のプログラム JdbcTest9.java
は、
java JdbcTest9 ↓により、データベースから 受け取る検索結果を、特定の基準(昇順)に基づいて並べ替えて取得する。
import java.sql.*; public class JdbcTest9 { public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_1"; String user = ""; String password = ""; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT name, price FROM fruit ORDER BY price"); while ( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(name + " : " + price); } rs.close(); stmt.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } }
プログラム JdbcTest9.java の説明:
JdbcTest9.javaは、 pcxxxx.edu.tuis.ac.jpにあるデータベースサーバと 接続し、プログラムを実行する。ユーザ名は匿名ユーザ、パスワード は省略されている。
まず、
import java.sql.*;では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。
Class.forName( "org.gjt.mm.mysql.Driver" );では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。
String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_1";では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、pcxxxx.edu.tuis.ac.jp上のtest_1データベースと接続することを あらわしている。
String user = ""; String password = "";では、データベースの接続に用いるユーザ名を指定しており、ここでは 匿名ユーザをあらわしている。その際のパスワードは設定しないことを あらわす。
conn = DriverManager.getConnection( url, user, password );では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。
Statement stmt = conn.createStatement();では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。
ResultSet rs = stmt.executeQuery("SELECT name, price FROM fruit ORDER BY price");では、Statementオブジェクトstmtに対してSQL文("SELECT name, price FROM fruit ORDER BY price")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。
ResultSetオブジェクトrsには、executeQuery()メソッドにより問い合わせを おこなった結果が格納される。
while( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); System.out.println(name + " : " + price); }では、ResultSetオブジェクトrsから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。
rs.close(); stmt.close(); conn.close();では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。
次のプログラム JdbcTest10.java
は、
java JdbcTest10 ↓により、 複数の行を列の値を基準にしてグループ化して取得する。
import java.sql.*; public class JdbcTest10 { public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_5"; String user = ""; String password = ""; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT color, COUNT(*) AS count FROM color GROUP BY color"); while ( rs.next() ) { String color = rs.getString("color"); int count = rs.getInt("count"); System.out.println(color + " : " + count); } rs.close(); stmt.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } }
ここで対象とするcolorテーブルの構造と値は以下に示される。
列名 | データ型 | NOT NULL or not |
---|---|---|
name | VARCHAR(10) | NOT NULL |
color | VARCHAR(10) |
name | color |
---|---|
apple | red |
orange | orange |
grape | purple |
banana | yellow |
meron | green |
tomato | red |
lemon | yellow |
carrot | orange |
プログラム JdbcTest10.java の説明:
JdbcTest10.javaは、 pcxxxx.edu.tuis.ac.jpにあるデータベースサーバと 接続し、プログラムを実行する。ユーザ名は匿名ユーザ、パスワード は省略されている。
まず、
import java.sql.*;では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。
Class.forName( "org.gjt.mm.mysql.Driver" );では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。
String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_5";では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、pcxxxx.edu.tuis.ac.jp上のtest_5データベースと接続することを あらわしている。
String user = ""; String password = "";では、データベースの接続に用いるユーザ名を指定しており、ここでは 匿名ユーザをあらわしている。その際のパスワードは設定しないことを あらわす。
conn = DriverManager.getConnection( url, user, password );では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。
Statement stmt = conn.createStatement();では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。
ResultSet rs = stmt.executeQuery("SELECT color, COUNT(*) AS count GROUP BY color");では、Statementオブジェクトstmtに対してSQL文("SELECT color, COUNT(*) AS count GROUP BY color")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。 取得したResultSetオブジェクトrsには、executeQuery()メソッドにより 問い合わせをおこなった結果が格納される。
while( rs.next() ) { String name = rs.getString("color"); int count = rs.getInt("count"); System.out.println(color + " : " + count); }では、ResultSetオブジェクトから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。
rs.close(); stmt.close(); conn.close();では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。
次のプログラム JdbcTest11.java
は、
java JdbcTest11 ↓により、SELECT文のWhere句に結合条件を与えることで、 複数のテーブルから列の値を取得する。
import java.sql.*; public class JdbcTest11 { public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_5"; String user = ""; String password = ""; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT fruit.name, fruit.price, color.color FROM fruit, color WHERE fruit.name = color.name"); while ( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); String color = rs.getString("color"); System.out.println(name + " : " + price + " : " + color); } rs.close(); stmt.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } }
プログラム JdbcTest11.java の説明:
JdbcTest11.javaは、 pcxxxx.edu.tuis.ac.jpにあるデータベースサーバと 接続し、プログラムを実行する。ユーザ名は匿名ユーザ、パスワード は省略されている。
まず、
import java.sql.*;では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。
Class.forName( "org.gjt.mm.mysql.Driver" );では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。
String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_5";では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、pcxxxx.edu.tuis.ac.jp上のtest_5データベースと接続することを あらわしている。
String user = ""; String password = "";では、データベースの接続に用いるユーザ名を指定しており、ここでは 匿名ユーザをあらわしている。その際のパスワードは設定しないことを あらわす。
conn = DriverManager.getConnection( url, user, password );では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。
Statement stmt = conn.createStatement();では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。
ResultSet rs = stmt.executeQuery("SELECT fruit.name, fruit.price, color.color FROM fruit, color WHERE fruit.name = color.name");では、Statementオブジェクトstmtに対してSQL文("SELECT fruit.name, fruit.price, color.color FROM fruit.name = color.name")を渡し、 SQL文を実行する。SQL文を渡し実行するためのメソッドは、 executeQuery()を利用する。取得したResultSetオブジェクトrsには、 executeQuery()メソッドにより問い合わせをおこなった結果が格納される。
while( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); String color = rs.getString("color"); System.out.println(name + " : " + price + " : " + color); }では、ResultSetオブジェクトから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。
rs.close(); stmt.close(); conn.close();では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。
次のプログラム JdbcTest12.java
は、
java JdbcTest12 ↓により、テーブル名に別名を与え、それを使ってデータを検索する(内部結合する)。
import java.sql.*; public class JdbcTest12 { public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_5"; String user = ""; String password = ""; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT f.name, f.price, c.color FROM fruit f, color c WHERE f.name = c.name"); while ( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); String color = rs.getString("color"); System.out.println(name + " : " + price + " : " + color); } rs.close(); stmt.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } }
プログラム JdbcTest12.java の説明:
JdbcTest12.javaは、 pcxxxx.edu.tuis.ac.jpにあるデータベースサーバと 接続し、プログラムを実行する。ユーザ名は匿名ユーザ、パスワード は省略されている。
まず、
import java.sql.*;では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。
Class.forName( "org.gjt.mm.mysql.Driver" );では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。
String url = "jdbc:mysql://pcxxxx.edu.tuis.ac.jp/test_1";では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、pcxxxx.edu.tuis.ac.jp上のtest_5データベースと接続することを あらわしている。
String user = ""; String password = "";では、データベースの接続に用いるユーザ名を指定しており、ここでは 匿名ユーザをあらわしている。その際のパスワードは設定しないことを あらわす。
conn = DriverManager.getConnection( url, user, password );では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。
Statement stmt = conn.createStatement();では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトを作成する。
ResultSet rs = stmt.executeQuery("SELECT f.name, f.price, c.color FROM fruit f, color c WHERE f.name = c.name");では、Statementオブジェクトstmtに対してSQL文("SELECT f.name, f.price c.color FROM fruit f, color c WHERE f.name = c.name")を渡し、SQL文を 実行する。SQL文を渡し実行するためのメソッドは、executeQuery()を 利用する。取得するResultSetオブジェクトrsには、executeQuery()メソッド により問い合わせをおこなった結果が格納される。
while( rs.next() ) { String name = rs.getString("name"); int price = rs.getInt("price"); String color = rs.getString("color"); System.out.println(name + " : " + price + " : " + color); }では、ResultSetオブジェクトから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。
rs.close(); stmt.close(); conn.close();では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。
問題-1
JdbcTest7.java
を実行して、その結果を表示せよ。
問題-2
JdbcTest8.java
を実行して、その結果を表示せよ。
問題-3
JdbcTest9.java
を実行して、その結果を表示せよ。
問題-4
問題-5
問題-6
問題-7
問題-8
問題-9
問題-10