教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習

データベースとの連携 (Java アプリケーション)

1. テーブルの結合(外部結合)

a. 左外部結合

SQLLeftOuterJoin.javaは、検索結果として複数のテーブル の左外部結合を取得する。

import java.sql.*;

public class SQLLeftOuterJoin {
	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 syohin_tbl1.syohinname, 
                             hanbai_tbl.kokyakucode, hanbai_tbl. hanbaibi,
                             hanbai_tbl.price 
                             from syohin_tbl1 left join hanbai_tbl 
                             on syohin_tbl1.syohincode = hanbai_tbl.syohincode");
			
			while (rs.next()) {
			        String name = rs.getString("syohinname");
				String code = rs.getString("kokyakucode");
				String date = rs.getString("hanbaibi");
				int price = rs.getInt("price");
				System.out.println("syohinname=" + name + " : " 
                                    + "kokyakucode=" + code + " : " + "hanbaibi=" 
                                    + date + ":" + "price=" + price);
			}
			
			rs.close();
			stmt.close();
			conn.close();
		} catch ( SQLException e ) {
			e.printStackTrace();
		} catch ( Exception e ) {
			e.printStackTrace();
		}
	}
}

プログラムSQLLeftOuterJoin.javaの説明

SQLLeftOuterJoin.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。ユーザ名は"root"、パスワードは"tuis2008system" であらわす。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

   stmt.executeQuery("SELECT syohin_tbl1.syohinname, 
                         hanbai_tbl.kokyakucode, hanbai_tbl. hanbaibi,
                         hanbai_tbl.price 
                         from syohin_tbl1 left join hanbai_tbl 
                         on syohin_tbl1.syohincode = hanbai_tbl.syohincode");
では、Statementオブジェクトstmtに対してSQL文("SELECT syohin_tbl1.syohinname, hanbai_tbl.kokyakucode, hanbai_tbl. hanbaibi, hanbai_tbl.price from syohin_tbl1 left join hanbai_tbl on syohin_tbl1.syohincode = hanbai_tbl.syohincode")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。 得られるResultSetオブジェクトrsには、executeQuery()メソッドにより 問い合わせをおこなった結果が格納される。

  while (rs.next()) {
	        String name = rs.getString("syohinname");
		String code = rs.getString("kokyakucode");
		String date = rs.getString("hanbaibi");
		int price = rs.getInt("price");
		System.out.println("syohinname=" + name + " : " 
                              + "kokyakucode=" + code + " : " + "hanbaibi=" 
                              + date + ":" + "price=" + price);
                }
では、ResultSetオブジェクトrsから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。

      rs.close();
      stmt.close();
      conn.close();
では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。

b. 右外部結合

SQLRightOuterJoin.javaは、検索結果として複数のテーブル の右外部結合を取得する。

import java.sql.*;

public class SQLRightOuterJoin {
	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 hanbai_tbl.syohincode, 
                              syohin_tbl1.syohinname, hanbai_tbl.kokyakucode,
                              hanbai_tbl.hanbaibi, hanbai_tbl.price 
                              from syohin_tbl1 right join hanbai_tbl
                              on syohin_tbl1.syohincode = hanbai_tbl.syohincode");
		
			while (rs.next()) {
				String scode = rs.getString("syohincode");
				String name = rs.getString("syohinname");
				String kcode = rs.getString("kokyakucode");
				String date = rs.getString("hanbaibi");
				int price = rs.getInt("price");

				System.out.println("syohincode=" + scode + " : " 
                                    + "syohinname=" + name + " : " 
                                    + "kokyakucode=" + kcode + " : " 
                                    + "hanbaibi="  + date + ":" 
                                    + "price=" + price);
			}
		
			rs.close();
			stmt.close();
			conn.close();
		} catch ( SQLException e ) {
			e.printStackTrace();
		} catch ( Exception e ) {
			e.printStackTrace();
		}
	}
}

プログラムSQLRightOuterJoin.javaの説明

SQLRightOuterJoin.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。ユーザ名は"root"、パスワードは"tuis2008system" をあらわしている。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

    ResultSet rs = 
      stmt.executeQuery("SELECT hanbai_tbl.syohincode, 
                         syohin_tbl1.syohinname, hanbai_tbl.kokyakucode,
                         hanbai_tbl.hanbaibi, hanbai_tbl.price 
                         from syohin_tbl1 right join hanbai_tbl
                         on syohin_tbl1.syohincode = hanbai_tbl.syohincode");
では、Statementオブジェクトstmtに対してSQL文("SELECT hanbai_tbl.syohincode, syohin_tbl1.syohinname, hanbai_tbl.kokyakucode, hanbai_tbl.hanbaibi, hanbai_tbl.price from syohin_tbl1 right join hanbai_tbl on syohin_tbl1.syohincode = hanbai_tbl.syohincode")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。 得られるResultSetオブジェクトrsには、executeQuery()メソッドにより 問い合わせをおこなった結果が格納される。

    while (rs.next()) {
 	String scode = rs.getString("syohincode");
	String name = rs.getString("syohinname");
	String kcode = rs.getString("kokyakucode");
	String date = rs.getString("hanbaibi");
	int price = rs.getInt("price");
	System.out.println("syohincode=" + scode + " : " 
                            + "syohinname=" + name + " : " 
                            + "kokyakucode=" + kcode + " : " 
                            + "hanbaibi="  + date + ":" 
                            + "price=" + price);
	}
では、ResultSetオブジェクトrsから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得する。getInt()メソッドは、RuseltSetから指定 されたフィールド名(列)の値をIntとして取得する。

      rs.close();
      stmt.close();
      conn.close();
では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。

2. データの更新

ExecuteUpdate.javaは、データベース管理システム(DBMS)に SQL文のupdate文を送信し、データの更新をおこなう。

import java.sql.*;

public class ExecuteUpdate {
	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();
			int updateCount = 
                          stmt.executeUpdate("UPDATE fruit SET 
                               price = 180 WHERE name = 'peach'");

			if (updateCount > 0) {
				System.out.println(updateCount 
                                          + "行更新されました");
			} else {
				System.out.println("更新された行はありません");
			}
	
			stmt.close();
			conn.close();

		} catch(SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

プログラムExecuteUpdate.javaの説明

ExecuteUpdate.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

     int updateCount = 
                    stmt.executeUpdate("UPDATE fruit SET 
                              price = 180 WHERE name = 'peach'");
では、Statementオブジェクトstmtに対してSQL文("UPDATE fruit SET price = 180 WHERE name = 'peach'") を渡し、SQL文を実行する。SQL文を渡し実行するためのメソッドは、 executeUpdate()を利用する。updateCountには、変更されたレコードの行数が格納される。

	if (updateCount > 0) {
		System.out.println(updateCount + "行更新されました");
		} else {
			System.out.println("更新された行はありません");
		}

では、updateCountが0より大きければ、レコードが更新されたことを表示し、 そうでなければ変更されたレコード行がないことを表示している。

      stmt.close();
      conn.close();
では、Statementオブジェクト、Connectionオブジェクトの切断をおこなう。

3. データの追加

SQLInsert.javaは、データベース管理システム(DBMS)に SQL文のinsert文を送信し、データの追加をおこなう。

import java.sql.*;

public class SQLInsert {
	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();
			int insertCount = 
                          stmt.executeUpdate("INSERT INTO fruit 
                                (no, name, price) VALUES 
                                (6, 'peer', 120)");
			if (insertCount > 0) {
				System.out.println(insertCount 
                                           + "行追加されました");
			} else {
				System.out.println("追加された行はありません");
			}

			stmt.close();
			conn.close();

		} catch(SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

プログラムSQLInsert.javaの説明

SQLInsert.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

     int insertCount = 
                      stmt.executeUpdate("INSERT INTO fruit 
                                (no, name, price) VALUES 
                                (6, 'peer', 120)");
では、Statementオブジェクトstmtに対してSQL文("INSERT INTO fruit (no, name, price) VALUES (6, 'peer', 120)")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeUpdate()を利用する。 insertCountには、変更されたレコード行数が格納される。

   if (insertCount > 0) {
			System.out.println(insertCount + "行追加されました");
			} else {
				System.out.println("追加された行はありません");
			}
では、insertCountが0より大きければ、レコードが更新されたことを表示し、 そうでなければ変更されたレコード行がないことを表示している。

      stmt.close();
      conn.close();
では、Statementオブジェクト、Connection オブジェクトの切断をおこなう。

4. データの削除

SQLDelete.javaは、データベース管理システム(DBMS)に SQL文のdelete文を送信し、データの削除をおこなう。

import java.sql.*;

public class SQLDelete {
	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();
			int deleteCount = 
                          stmt.executeUpdate("DELETE FROM fruit 
                                           WHERE name = 'peer'");
			if (deleteCount > 0) {
				System.out.println(deleteCount 
                                           + "行削除されました");
			} else {
				System.out.println("削除された行はありません");
			}

			stmt.close();
			conn.close();

		} catch(SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

プログラムSQLDelete.javaの説明

SQLDelete.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

     int deleteCount = 
                       stmt.executeUpdate("DELETE FROM fruit 
                               WHERE name = 'peer'");
では、Statementオブジェクトstmtに対してSQL文("DELETE FROM fruit WHERE name = 'peer'")を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeUpdate()を利用する。 deleteCountには、変更されたレコード行数が格納される。

      if (deleteCount > 0) {
			System.out.println(deleteCount + "行削除されました");
			} else {
				System.out.println("削除された行はありません");
			}

では、deleteCountが0より大きければ、レコードが更新されたことを表示し、 そうでなければ変更されたレコード行がないことを表示している。

      stmt.close();
      conn.close();
では、Statementオブジェクト、Connection オブジェクトの切断をおこなう。

5. テーブルの作成

SQLCreateTable.javaは、データベース管理システム(DBMS)に SQL文のcreate table文を送信し、テーブルの作成をおこなう。

import java.sql.*;

public class SQLCreateTable {
	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();
			int count = 
                           stmt.executeUpdate("CREATE TABLE 
                           vegetable (no INT(2), name VARCHAR(10), 
                           price INT(4))");
			if (count == 0) {
				System.out.println("テーブルが作成されました");
			}

			stmt.close();
			conn.close();

		} catch(SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

プログラムSQLCreateTable.javaの説明

SQLCreateTable.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

     int count = stmt.executeUpdate("CREATE TABLE 
                        vegetable (no INT(2), name VARCHAR2(10), 
                        price INT(4))");
では、Statementオブジェクトstmtに対してSQL文("CREATE TABLE vegetable (no INT(2), name VARCHAR2(10), price INT(4))")を渡し、 SQL文を実行する。SQL文を渡し実行するためのメソッドは、executeUpdate()を利用する。 CREATE TABLE文を実行した結果、countには0が格納される。

      if (count == 0) {
                        System.out.println("テーブルが作成されました");
		      }
では、CREATE TABLE文の実行が成功すると、テーブルが作成されたとのメッセージ を表示する。なお、同名のテーブルがすでに作成されている場合には、例外が発生 する。

      stmt.close();
      conn.close();
では、Statementオブジェクト、Connectionオブジェクトの切断をおこなう。

6. テーブルの削除

SQLDropTable.javaは、データベース管理システム(DBMS)に SQL文のdrop table文を送信し、テーブルの削除をおこなう。

import java.sql.*;

public class SQLDropTable {
	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();
			int count = 
             stmt.executeUpdate("DROP TABLE 
                         vegetable");
			if (count == 0) {
				System.out.println("テーブルが削除されました");
			}

			stmt.close();
			conn.close();

		} catch(SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

プログラムSQLDropTable.javaの説明

SQLDropTable.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトmtを作成する。

      int count = stmt.executeUpdate("DROP TABLE vegetable");
では、Statementオブジェクトstmtに対してSQL文("DROP TABLE vegetable") を渡し、SQL文を実行する。 SQL文を渡し実行するためのメソッドは、executeUpdate()を利用する。 executeUpdate()メソッドによりDrop Table文を実行した場合、 countには0が格納される。なお、指定したテーブルが存在しない場合には、 例外が発生する。

     if (count == 0) {
	System.out.println("テーブルが削除されました");
      }
では、countが0であるかどうかを調べ、0であった場合にテーブルが 削除されたことを表示する。

      stmt.close();
      conn.close();
では、Statementオブジェクト、Connectionオブジェクトの切断をおこなう。

7. SQL関数の実行

SQLFunction.javaは、データベース管理システム(DBMS)に データベース関数を含むSQL文を送信し、その結果を表示 する。

import java.sql.*;

public class SQLFunction {
	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 COUNT(*) 
                       FROM fruit");
			while (rs.next()) {
				String count = 
                  rs.getString("COUNT(*)");
				System.out.println("count : " + count);
			}
			
			ResultSet rs2 = 
             stmt.executeQuery("SELECT SUM(price) 
                       FROM fruit");
			while (rs2.next()) {
				String sum = 
                  rs2.getString("SUM(price)");
				System.out.println("sum : " + sum);
			}

			rs.close();
			rs2.close();
			stmt.close();
			conn.close();

		} catch(SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

プログラムSQLFunction.javaの説明

SQLFunction.javaは、 localhostにあるデータベースサーバと接続し、 プログラムを実行する。

まず、

import java.sql.*;
では、DBC2.0 Core APIであるjava.sqlパッケージがインポートされる。

 Class.forName( "com.mysql.jdbc.Driver" );    
では、クラスローダによりJDBCドライバを読み込んでいることを 示している。引数は、データベースにアクセスするためのJDBCドライバ のクラス名である。

    String url = "jdbc:mysql://localhost/test_1";
では、データベースをあらわすURLを設定している。 データベースをあらわすURL(データベースURL)は、データベースに接続する 場合に必要となる情報をセットした文字列である。この文字列の構造は、 "jdbc"、サブプロトコル、サブネームの3つの部分から構成される。 ここでは、localhost上のtest_1データベースと接続することをあらわしている。

    String user           = "root";
    String password       = "tuis2008system";
では、データベースの接続に用いるユーザ名とパスワードを指定している。

Connection conn = DriverManager.getConnection( url, user, password ); 
では、DriverManagerクラスのgetConnectionメソッドを使ってデータベースに 接続する。ここで、第一引数に与えているものが、上記のデータベースURL である。実行されたメソッドの戻り値は、接続を表すConnectionオブジェクトである。

      Statement stmt = conn.createStatement();
では、データベースの接続後に、sql文をデータベースに直接渡すのでは なく、sqlコンテナの役割を果たすオブジェクトに渡すためのStatement オブジェクトstmtを作成する。

      ResultSet rs = 
           stmt.executeQuery("SELECT COUNT(*) 
                       FROM fruit");
では、Statementオブジェクトstmtに対してSQL文("SELECT COUNT(*) FROM fruit")を渡し、SQL文を実行する。 COUNT関数は、指定されたれるに値があるレコードの行数を求める。 ここでは、COUNT(*)により、テーブル全体のレコードの行数を 取得する。SQL文を渡し実行するためのメソッドは、executeQuery()を利用する。 得られるResultSetオブジェクトrsには、executeQuery()メソッドにより 問い合わせをおこなった結果が格納される。

      while (rs.next()) {
	String count = rs.getString("COUNT(*)");
	System.out.println("count : " + count);	}
では、ResultSetオブジェクトrsから結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(列) の値をStringとして取得し、表示している。

     ResultSet rs2 = 
   stmt.executeQuery("SELECT SUM(price) FROM fruit");
では、Statementオブジェクトstmtに対してSQL文("SELECT SUM(price) FROM fruit")を渡し、SQL文を実行する。 SUM関数は、指定された列の値の合計を求める。

     while (rs2.next()) {
			String sum = 
            rs2.getString("SUM(price)");
			System.out.println("sum : " + sum);
			}

では、ResultSetオブジェクトrs2から結果を取得して表示している。 getString()メソッドは、RuseltSetから指定されたフィールド名(price) の値の合計を求め、表示している。
      rs.close();
      rs2.close();
      stmt.close();
      conn.close();
では、ResultSetオブジェクト、Statementオブジェクト、Connection オブジェクトの切断をおこなう。

演習問題

問題-1

SQLLeftOuterJoin.javaを実行して、その結果を表示せよ。

問題-2

SQLRightOuterJoin.javaを実行して、その結果を表示せよ。

問題-3

ExecuteUpdate.javaを実行して、その結果を表示せよ。

問題-4

SQLInsert.javaを実行して、その結果を表示せよ。

問題-5

SQLDelete.javaを実行して、その結果を表示せよ。

問題-6

プログラムSQLCreateTable.javaを作成・実行し、 その結果を示せ。

問題-7

プログラムSQLDropTable.javaを作成・実行し、 その結果を示せ。

問題-8

プログラムSQLFunction.javaを作成・実行し、 その結果を示せ。

システムプログラミング演習


Yasuo NAGAI