環境構築
職業訓練校の授業ではPostgleSQLを使っていたが、自習では、MySQLの練習もしていこうと思います。
まずMySQLをDLしていく。
1.MySQLの公式ホームページに行きダウンロードをクリックし、ページ下のほうにあるMySQL Communityをクリックする。(無料DBだから) 2.MySQL Installer for Windowsをクリックし、サイズを選びDLする。 3.DLを進めていき、root paswordを設定する 4.初期設定は特にいじらずDL完了。次は、JDBCドライバをDLしていく。
1.MySQL コネクタと検索し、JDBC Driver for MySQL (Connector/J)を選択し、 初期設定が、Select Operating System : microsoft windowsとなっているので、platform independentを選択肢し、DLする。(プラットフォーム独立モデル) 2.DLファイルを開くと、mysql-connector-j-8.0.33.jarが入っているので、これを /tomcat/9(使っているバージョン)/libファイルの中に移動する。環境変数設定
1.環境変数設定をひらき、PATHに新規追加で、MySQL.exeがあるパスを設定する。(自分の場合は、C:\Program Files\MySQL\MySQL Server 8.0\bin)
2.CMDを開いて、mysql -u root -pと打って開けるかを確認する。
C:\Users\ユーザ名> mysql -u root -p
パスワードを入力して、Welcome~と表示されると、接続成功。
C:\Users\ユーザ名 > mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; ~省略~
mysql >
Eclipceを使っている場合
1.JDBCを使いたいJavaファイルを右クリックして、ビルドパス > 外部アーカイブの追加を選択して、JDBCドライバを選択する。基本操作
DDLの場合
DBに接続する
DriverManagerを使ってJDBCドライバを管理する。Connection con = DriverManager.Connection(URL, ユーザー名, パスワード);
MySQLを使う場合のURLは、下記を記述する。
jdbc:mysql://localhost/DB名
変数conには、DBの接続情報が代入される。
ステートメントを生成する
Statement stmt = con.createStatement();
SQLを実行
int count = stmt.executeUpdate(SQL文);
変数countに、SQL文を何行更新したかのカウントを代入している。
リソースの開放
stmt.cloce();
con.close();
解放時は、順番を逆にして閉じていく必要がある。
※JDBC4.0(Java SE6)以降からは、Class.forName()の記述が不要になった。※
DMLの場合
DBに接続して、ステートメントを生成する。Connection con = DriverManager.Connection(URL, ユーザー名, パスワード);
Statement stmt = con.createStatement();
SQLを実行
ResultSet rs = stmt.executeQuery(SQL文);
ResultSetオブジェクトに検索結果を保持する。
検索結果などを扱う繰り返し処理
while(rs.next()){
System.out.println(rs.getInt("id"));
}
取得したい列名や列番号をgettrメソッドの中に記述する。
※列番号は、1から記述する※
getterメソッドは、欲しい値が定義されているデータ型のgetterを記述する。
リソースの開放
rs.close();
stmt.cloce();
con.close();
ここまでが一連の流れ。
PreparedStatement
基本操作ではステートメントの生成をStatementを使って行っていたが、PreparedStatementを使ったほうがセキュリティ的にも性能的にもよい。
INSERT文を使って使用してみる。
String[] names = {田中,佐藤,山田}
int[] ages = {20,25,30}
Connection con = DriverManager.getConnection(URL, ユーザー名, パスワード);
PreparedStatement ps =
new PreparedStatement("INSERT INTO student VALUES(?,?"));
for(int i = 0; i < names.length; i++){
ps.setInt(1,names[i]);
ps.getString(2,ages[i])
}
※コードが見にくくならないように例外処理は省略しています。※
トランザクション処理
トランザクション設定をする。
Connection con = DriverManager.getConnection(URL, ユーザー名, パスワード);
con.setAuttoCommit(false);
このコードを記述することによって、オートコミットを解除する。
コミットしたい場合は、
con.commit();
処理を記述した後に、commitメソッド呼び出す。
ロールバックしたい場合は、
con.rollback();
rollbackメソッドを呼びだす。
まとめ
DAOクラスを作ることによって、様々でDBで動かせるので、プラットフォーム依存をなくすことができる。