MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

JavaのPreparedStatementを使ってMySQLテーブルにレコードを挿入する方法

JavaのPreparedStatementを使用してMySQLのテーブルにレコードを挿入するには、まずINSERT文の雛形を作成し、値の部分をプレースホルダー(?)で置き換えます。SQLインジェクション対策やパフォーマンス向上の観点からも、この方法は推奨されています。

1. INSERT文の基本構文

レコード挿入用のSQLは、以下のような構文で記述します。

String anyVariableName = "INSERT INTO yourTableName(yourColumnName1, yourColumnName2, yourColumnName3, ...N)" +
"VALUES (?, ?, ?, ...N)";

2. PreparedStatementで値を設定する

次に、PreparedStatementオブジェクトを生成し、各カラムに対応する値をセットします。プレースホルダーの番号は1から始まる点に注意してください。

PreparedstatementObject = con.prepareStatement(query);
PreparedstatementObject.setXXX(1, yourValue);
PreparedstatementObject.setXXX(2, yourValue);
PreparedstatementObject.setXXX(3, yourValue);
...
N

3. サンプルテーブルの作成

まず、MySQLで動作確認用のテーブルを作成しましょう。ここでは「sample」データベース内にCourseDemoテーブルを作成します。

mysql> create table CourseDemo
-> (
-> CourseId int,
-> StudentName varchar(20),
-> CourseName varchar(30)
-> );
Query OK, 0 rows affected (1.86 sec)

4. Javaコードの実装例

以下は、PreparedStatementを使ってテーブルにレコードを挿入する完全なJavaコードです。キーボードからコースID・学生名・コース名を入力し、それらの値をデータベースに登録します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class InsertRecordInPreparedStatement {
    static int cid;
    static String studentName;
    static String courseName;

    public static void main(String[] args) {
        String JdbcURL = "jdbc:mysql://localhost:3306/sample?useSSL=false";
        String Username = "root";
        String password = "123456";
        Connection con = null;
        Scanner keyboardInput = new Scanner(System.in);
        PreparedStatement pstmt = null;
        String query = "INSERT INTO CourseDemo(CourseId, StudentName, CourseName)" + "VALUES (?, ?, ?)";
        try {
            con = DriverManager.getConnection(JdbcURL, Username, password);
            input(keyboardInput);
            pstmt = con.prepareStatement(query);
            pstmt.setInt(1, cid);
            pstmt.setString(2, studentName);
            pstmt.setString(3, courseName);
            int status = pstmt.executeUpdate();
            if(status > 0) {
                System.out.println("Record is inserted successfully !!!");
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }

    public static void input(Scanner keyboardInput) {
        System.out.println("Enter the course id:");
        cid = keyboardInput.nextInt();
        System.out.println("Enter the Student Name:");
        studentName = keyboardInput.next();
        System.out.println("Enter the Course Name:");
        courseName = keyboardInput.next();
    }
}

実行結果

プログラムを実行すると、以下のように値の入力を求められ、正常に挿入が完了するとメッセージが表示されます。

Enter the course id:
101
Enter the Student Name:
John
Enter the Course Name:
Java
Record is inserted successfully !!!

5. 挿入結果の確認

レコードが正しく登録されたかどうかは、MySQL側でSELECT文を実行して確認できます。

mysql> select * from CourseDemo;

実行結果は以下のとおりです。

+----------+-------------+------------+
| CourseId | StudentName | CourseName |
+----------+-------------+------------+
| 101      | John        | Java       |
+----------+-------------+------------+
1 row in set (0.00 sec)

まとめ

このように、PreparedStatementを使用することで、値を安全かつ簡潔にSQLへバインドできます。文字列連結でSQLを組み立てる方法と比べ、SQLインジェクションのリスクを大幅に減らせるうえ、同じSQLを繰り返し実行する場合のパフォーマンスにも優れています。実際の開発では、接続情報の外部化やtry-with-resourcesによるリソース管理なども併せて検討すると、より堅牢なコードになります。

  1. JavaでMySQLテーブルに1つのカラムのみを挿入する方法

    JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m

  2. Javaを使用してMySQLテーブルの値を表示する方法

    MySQLデータベースのテーブル値をJavaで表示するには、ResultSetの概念を利用します。データベースへの接続には、MySQL JDBCドライバーを使用します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo87    -> (    -> name varchar(20),    -> age int    -> )