JavaからMySQLに接続して登録する

2015.12.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データベースは作成されているものとし、データベース名・テーブル名は下記とします。

データベース名:「cm」
テーブル名: 「music」

ドライバの設定

今回はMySQLを使用するので、接続するために「JDBCドライバ」をダウンロードしてプロジェクトに結びつけます。
MySQL::Download Connector/J

Eclipseの場合、プロジェクトフォルダを選択して右クリックから、
「Properties」 > 「Java Build Path」 > 「Libraries」タブ > 「Add External JARs...」 からダウンロードした ”mysql-connector-java-x.x.xx-bin.jar” を選択。
最後に「OK」か「Apply」を押して決定。 20151215_blog_properties

「Referenced Libraries」が生成されてドライバが登録されていると思います。

登録された状態

テーブル作成

下記のSQL文を実行すると...

CREATE TABLE music(
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL, 
title VARCHAR(50) NOT NULL, 
year INTEGER(4) NOT NULL, 
PRIMARY KEY(id) 
);

こんなテーブルが出来上がりました。

music

ここに登録して行きます。

コード

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnectionClass {
    
    static final String URL = "jdbc:mysql://localhost/cm";
    static final String USERNAME = "user";
    static final String PASSWORD = "pass";

    public static void main(String[] args) {
        
        try (
                Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);	
                Statement statement = connection.createStatement();
                ) {
			
            String sql = "INSERT INTO music VALUES (1, 'Michael Jackson', 'Butterflies', 2001);";
            int result = statement.executeUpdate(sql);
            System.out.println("結果1:" + result);

            sql = "INSERT INTO music (name, title, year) VALUES ('Aril Brikha', 'Groove La Chord', 1998);";
            result = statement.executeUpdate(sql);
            System.out.println("結果2:" + result);
            
        } catch (SQLException e) {
                
            e.printStackTrace();
                
        }
        
    }
    
}

解説

ConnectionでMySQLのデータベースに接続をするためにデータベースURL、ユーザ名、パスワードを設定。
データベースURLはこんな感じで。

jdbc:mysql:// ホスト名 / データベース名

Statement でSQL文をデータベースに送るオブジェクトを生成。 Connection と Statement は AutoCloseable が設定されていて try-catch-resources で記述しているので、 close() (リソース解放処理)が自動的に実行されます。

try (
        Connection connection = DriverManager.getConnection("データベースURL", "ユーザ名", "パスワード");
        Statement statement = connection.createStatement();
        ) }

SQL文で全カラムに値を設定しているので、カラム名の指定をせずに statement.execute(sql) で実行。
その返り値を出力します。

String sql = "INSERT INTO music VALUES (1, 'Michael Jackson', 'Butterflies', 2001);";
int result = statement.executeUpdate(sql);
System.out.println("結果1:" + result);

"id"を指定せずにオートインクリメントを利用するSQL文を実行。
その返り値を出力します。

sql = "INSERT INTO music (name, title, year) VALUES ('Aril Brikha', 'Groove La Chord', 1998);";
result = statement.executeUpdate(sql);
System.out.println("結果2:" + result);

出力結果

登録に成功するとINSERT文それぞれで更新した行数が返ります。

結果1:1
結果2:1

テーブル確認

20151215_blog_sql_select

以上になります。

まとめ

前回の「CSVファイルをJavaで読み込んで文字コードを変換」と同様、当時に自分が欲しかった内容を記事にしました。

今回はSQL文の実行に Statement を使用して一つずつの結果を見て行きましたが、複数のSQL文をまとめて処理できる PreparedStatement も有るので別の機会に紹介しようと思います。