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のスレッドで並列処理を行う |
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









