Javaでデータベース操作(検索/更新系SQL/プリペアドステートメント/トランザクション)
目次
1. 事前準備
1-1. MySQLのインストールと設定
1-2. JDBCドライバのダウンロードとEclipse設定
2. SELECT文(検索系SQL)
3. INSERT/UPDATE/DELETE文(更新系SQL)、プリペアドステートメント、トランザクション
1. 事前準備
今回のデータベースは「MySQL」を使用します。
1-1. MySQLのインストールと設定
MySQLのインストールからコマンド操作(ユーザ/データベース/テーブルの作成)やODBC設定
の記事をご覧になりMySQLをインストールして「ユーザー/データベース/テーブル」を作成します。なお、今回はODBCは扱いませんのでその部分は準備しなくて良いです。
1-2. JDBCドライバのダウンロードとEclipse設定
スタートメニューからMySQL Installer -communityを選択。
「add ...」ボタンを押します。
「Connector/J8.0.11 x86」を右リストに追加して「Next」ボタンを押します。※8.0.11 x86はバージョンや環境により異なります。
後はどんどん先に進んで「Finish」で完了です。
次はEclipseの設定です。
「C:\Program Files (x86)\MySQL\Connector J 8.0」の中に「mysql-connector-java-8.0.11.jar」がありますので、それをEclipse側のメニューの[プロジェクト][プロパティ]を選択後、[Javaのビルド・パス]の[ライブラリー]タブにある「外部JARの追加」でライブラリとして追加します。
※パスはOS環境、8.0/8.0.11はバージョンにより異なります。
2. SELECT文(検索系SQL)
次はデータベース(sample_db)のmst_dummyテーブルから全データを取得します。SQLインジェクションを対策するには次章のプリペアドステートメント(パラメータ付きSQL)を使用して下さい。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Main { public static void main(final String[] args){ Connection con = null; Statement stmt = null; ResultSet rs = null; // JDBCの各設定 // ※jdbc:mysql://localhost/データベース名 // ※?以降はMySQLの設定により必要ないです。SSLを無効、タイムゾーンをUTCにしています。 String url = "jdbc:mysql://localhost/sample_db?useSSL=false&serverTimezone=UTC"; String user = "test"; // ユーザー名 String pass = "1234567890"; // パスワード try { // データベースに接続 con = DriverManager.getConnection(url,user,pass); // ステートメントオブジェクトを作成 stmt = con.createStatement(); // SQLの作成 String sql = "select no,title from mst_dummy"; // SQLの実行 rs = stmt.executeQuery(sql); System.out.println("--------------------"); System.out.println("no title"); System.out.println("--------------------"); // 結果セットからデータを取り出す while(rs.next()) { int no = rs.getInt("no"); String title = rs.getString("title"); System.out.print(no + "\t"); System.out.println(title); } System.out.println("--------------------"); } catch (Exception e) { System.out.println(e.getMessage()); }finally { // 各オブジェクトを解放する if(rs != null) { try { rs.close(); }catch (Exception e) { System.out.println(e.getMessage()); } } if(stmt != null) { try { stmt.close(); }catch (Exception e) { System.out.println(e.getMessage()); } } if(con != null) { try { con.close(); }catch (Exception e) { System.out.println(e.getMessage()); } } } } }
結果
no title
--------------------
1 あいうえお
2 かきくけこ
--------------------
3. INSERT/UPDATE/DELETE文(更新系SQL)、プリペアドステートメント、トランザクション
この例ではUPDATE文ですがINSERT/DELETE文でも同様です。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class Main { public static void main(final String[] args){ Connection con = null; PreparedStatement pstmt = null; // JDBCの各設定 // ※jdbc:mysql://localhost/データベース名 // ※?以降はMySQLの設定により必要ないです。SSLを無効、タイムゾーンをUTCにしています。 String url = "jdbc:mysql://localhost/sample_db?useSSL=false&serverTimezone=UTC"; String user = "test"; // ユーザー名 String pass = "1234567890"; // パスワード try { // データベースに接続 con = DriverManager.getConnection(url,user,pass); // プリペアドステートメント(パラメータ付きSQL)を作成 // ※プリペアドステートメントは「SQLインジェクション」の対策です。 pstmt = con.prepareStatement("UPDATE mst_dummy set title=? WHERE no=?"); pstmt.setString(1, "プチモンテ"); pstmt.setInt(2, 1); // トランザクションの開始 con.setAutoCommit(false); try { // SQLの実行(INSERT文、UPDATE文、DELETE文でも可能) int count = pstmt.executeUpdate(); System.out.println(count + "件のデータを更新しました。"); // コミット con.commit(); }catch (Exception e) { // ロールバック con.rollback(); System.out.println("データの更新に失敗しました。"); } } catch (Exception e) { System.out.println(e.getMessage()); }finally { // 各オブジェクトを解放する if(pstmt != null) { try { pstmt.close(); }catch (Exception e) { System.out.println(e.getMessage()); } } if(con != null) { try { con.close(); }catch (Exception e) { System.out.println(e.getMessage()); } } } } }
実行前
実行後
関連記事
前の記事: | JavaでURLのHTMLを取得する |
次の記事: | Javaのスレッドで並列処理を行う |