DBの概要
作りたいテーブルの概要を最初に補足しておく。
【登録者の体温を管理するアプリケーション】を作りたいので、1つのDBに2つのテーブルを準備。
① 会員の基本情報テーブル
② 会員の体温テーブル
①では、
1 |
int型 ID String型 NAME char型 GENDER |
の3つのカラムを用意して
②では、
1 |
int型 ID date型 date int/double型 TEMPERATURE int型 MEMBER_ID |
の4つのカラムを用意する
※PRIMAARY KEYはどちらのテーブルでもIDとした。
DBを用意する
まずは、コマンドプロンプトを開いてMySQLにDBを用意する。
1 2 |
mysql> create database temperature default character set utf8 ; Query OK, 1 row affected (0.00 sec) |
では次に管理者権限の設定をしておく。
1 2 3 |
mysql> grant all privileges on temperature.* -> to ××××@localhost identified by '****' ; Query OK, 0 rows affected, 1 warning (0.00 sec) |
これにてコマンドプロンプトでの設定は終了。
データベース操作ツールであるA5M2に移動する。
A5M2でテーブルを用意する
先ほど作ったデータベースを追加し、接続する。
そしてここからSQL文でテーブルを作っていく。
概要で紹介した1つ目のテーブルを作成
1 2 3 4 5 6 |
CREATE TABLE TEMPERATURE_MEMBERS ( ID INT NOT NULL PRIMARY KEY COMMENT 'ID', NAME VARCHAR(30) NOT NULL COMMENT '名前' , GENDER CHAR(1) NOT NULL COMMENT '性別(男:M/女:F)', REGIST_TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT'登録日時' ); |
では、仮データをINSERTしていきます。
1 2 3 4 5 6 7 8 |
INSERT INTO TEMPERATURE_MEMBERS (ID ,NAME ,GENDER ,REGIST_TIMESTAMP) VALUES(1 , 'SHOHEI' ,'M' , NULL ); INSERT INTO TEMPERATURE_MEMBERS (ID ,NAME ,GENDER ,REGIST_TIMESTAMP) VALUES(2 , 'MASAHIRO' ,'M' , NULL ); INSERT INTO TEMPERATURE_MEMBERS (ID ,NAME ,GENDER ,REGIST_TIMESTAMP) VALUES(3 , 'MIREI' ,'F' , NULL ); INSERT INTO TEMPERATURE_MEMBERS (ID ,NAME ,GENDER ,REGIST_TIMESTAMP) VALUES(4 , 'ANN' ,'F' , NULL ); |
概要で紹介した2つ目のテーブルを作成
1 2 3 4 5 6 |
CREATE TABLE TEMPERATURE_DATE ( ID INT NOT NULL PRIMARY KEY COMMENT 'ID', DAY DATE NOT NULL COMMENT '日付(YYYYMMDD)' , TEMPERATURE DOUBLE NOT NULL COMMENT '体温(℃)' , MEMBER_ID INT NOT NULL COMMENT 'メンバーID' ); |
こちらも仮データをINSERT
1 2 3 4 5 6 7 8 |
INSERT INTO TEMPERATURE_DATE (ID ,DAY ,TEMPERATURE , MEMBER_ID ) VALUES(1 , 20200512 ,36.2 ,1 ); INSERT INTO TEMPERATURE_DATE (ID ,DAY ,TEMPERATURE , MEMBER_ID ) VALUES(2 , 20200512 ,35.4 ,2 ); INSERT INTO TEMPERATURE_DATE (ID ,DAY ,TEMPERATURE , MEMBER_ID ) VALUES(3 , 20200512 ,36.7 ,3 ); INSERT INTO TEMPERATURE_DATE (ID ,DAY ,TEMPERATURE , MEMBER_ID ) VALUES(4 , 20200512 ,35.8 ,4 ); |
これにてテーブルの作成は完了!
最後に2つのテーブルのリレーションを確認するため、内部結合を用いて状況を確認する。
1 2 3 4 |
SELECT a.ID , a.NAME , b.TEMPERATURE FROM TEMPERATURE_MEMBERS a INNER JOIN TEMPERATURE_DATE b ON b.MEMBER_ID = a.ID ORDER BY a.ID ; |
はい、確かに2つのテーブルを正常に参照できていますね。
EclipseでJavaのコードを記述する
では、Javaからこのデータを参照するためのコードを書いていきます。
実行環境はEclipse。
まずはパッケージ名を登録
プロジェクト名:Temperature
パッケージ名:temperature01
ではじめてみる。
コードを書く前にJDBCドライバをパスで通す。
JavaではConnecter/Jというドライバを使う。
[ウィンドウ]→[設定]
[インストール済みJRE]→[編集]
から、Connecter/Jのフォルダに移り
mysql-connecter-java-**.jar というファイルを指定する。
ではコードを書いていく
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
package temperature01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Sample01 { private static String COMMA = "," ; //コンマ public static void main(String[] args) { // データベースへの接続 // JDBCドライバの相対パス String driverName = "com.mysql.cj.jdbc.Driver"; // 接続先のデータベース String jdbcUrl = "jdbc:mysql://localhost:3306/temperature?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; // 接続するユーザー名 String userId = "test_user" ; // 接続するユーザーのパスワード String userPass = "test_pass" ; // JDBCドライバのロード try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); } // JDBCに接続するためのオブジェクトを生成 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { // ① 接続の確立 con = DriverManager.getConnection(jdbcUrl , userId , userPass); // ② SQL文の送信 & 抽出結果の処理 StringBuffer buf = new StringBuffer(); buf.append("SELECT") ; buf.append(" id ,") ; buf.append(" name ,") ; buf.append(" gender ") ; buf.append(" FROM") ; buf.append(" temperature_members") ; buf.append(" ORDER BY") ; buf.append(" id ") ; // psオブジェクトを生成&発行するSQLをセット ps = con.prepareStatement(buf.toString()); // sql文の送信&実行結果を取得 rs = ps.executeQuery(); while (rs.next()) { StringBuffer rsbuf = new StringBuffer(); rsbuf.append(rs.getString("id")); rsbuf.append(COMMA); rsbuf.append(rs.getString("name")); rsbuf.append(COMMA); rsbuf.append(rs.getString("gender")); // 加工したレコード分のデータを表示 System.out.println(rsbuf.toString()); } } catch(SQLException e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } }; if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } }; if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } }; }; } } |
こんな感じで基本データを参照するプログラムを書いた。
実行結果はこんな感じ。
はい。ちゃんとデータは参照できています。
コメントを残す