JavaからMySQLへ接続する方法とサンプルコード


Posted on 2021/6/5 at 3:14


MySQLは世界で最も普及している、オープンソースデータベースとして有名です。 私も勤務先でいくつか業務アプリケーションを作成し運用していますが、 最大で約32万行のデータが入っていますが安定した稼働を維持しております。

今回はJavaからMySQLへ接続してデータを入力し、そのデータを取得するまでを説明します。

JDBCドライバを取得しアプリケーションに組み込む

JavaからMySQLへ接続するにはJDBCドライバを取得し、アプリケーションに組み込む必要があります。以下の2通りの方法があります。

  1. JDBCドライバのダウンロードサイトから直接ドライバをダウンロードし、手動でアプリケーションに組み込む。
  2. mavenを使用する。

手動でJDBCドライバを取得し組み込む

JDBCドライバのダウンロードサイトのMySQLコネクタ一覧から「JDBC Driver for MySQL」のダウンロードリンクをクリックします。

Operating SystemにPlatform independentを選択してzipファイルをダウンロードし、解凍すると中にmysql-connector-java-8.0.24.jarがあります。これがドライバ本体となります。

Eclipseに適当なJavaプロジェクトを作成します。プロジェクト内にlibディレクトリを作成しドライバをこの中にコピーしておきます。 そして、プロジェクトを右クリックして、ビルド・パス>ビルド・パスに追加を選択すると、ドライバをプロジェクトに組み込むことができます。


Mavenにdependencyを追加する

Eclipseに適当なMavenプロジェクトを作成し、pom.xmlのdependenciesに以下の項目を追加します。

			
<dependency>
  	<groupId>mysql</groupId>
  	<artifactId>mysql-connector-java</artifactId>
  	<version>8.0.25</version>
</dependency>
			
		

pom.xmlを右クリックして、Maven>プロジェクトの更新をします。

テスト用テーブル

テストに使用したデータベース(testdb)とテーブル(person)は以下の構成としました。

カラム名 データタイプ
id INT
name VARCHAR(25)
birthday DATE

接続テストコード

以下のテストコードを実行するとデータの挿入、更新、削除を行います。

			
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class ConnectMySQL {

	public static void main(String[] args) {
		ConnectMySQL test = new ConnectMySQL();
		// データの挿入
		test.insertData(1, "山田 太郎", "1997/9/24");
		test.insertData(2, "佐藤 太郎", "1980/3/4");
		test.insertData(3, "山田 花子", "1990/10/29");
		// データの表示
		test.selectData();
		// nameとbirthdayカラムを更新
		test.updateData(3, "山田 華子", "1991/10/30");
		// データの表示
		test.selectData();
		// データの削除
		test.deleteData();
		// データの表示
		test.selectData();
	}
	
	private void selectData() {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			con = getConnection();
			pstmt = con.prepareStatement("select * from person");
			rs = pstmt.executeQuery();
			System.out.println("* select person table *");
			while (rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("name");
				java.sql.Date birthday = rs.getDate("birthday");
				System.out.println(id + ", " +name+ ", " + birthday);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (pstmt != null)
						pstmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					try {
						if (con != null)
							con.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	
	private void insertData(int id, String name, String birthday) {
		Connection con = null;
		PreparedStatement pstmt = null;
		try {
			con = getConnection();
			pstmt = con.prepareStatement("insert into person (id, name, birthday) values (?, ?, ?)");
			pstmt.setInt(1, id);
			pstmt.setString(2, name);
			pstmt.setDate(3, getBirthday(birthday));
			pstmt.execute();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (con != null)
						con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	private void updateData(int id, String name, String birthday) {
		Connection con = null;
		PreparedStatement pstmt = null;
		try {
			con = getConnection();
			pstmt = con.prepareStatement("update person set name=?, birthday=? where id=?");
			pstmt.setString(1, name);
			pstmt.setDate(2, getBirthday(birthday));
			pstmt.setInt(3, id);
			pstmt.execute();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (con != null)
						con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	private void deleteData() {
		Connection con = null;
		PreparedStatement pstmt = null;
		try {
			con = getConnection();
			pstmt = con.prepareStatement("delete from person");
			pstmt.execute();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (con != null)
						con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	private Connection getConnection() throws ClassNotFoundException, SQLException {
		String url = "jdbc:mysql://localhost:3306/testdb";
		String user = "user";
		String pass = "password";
		Class.forName("com.mysql.jdbc.Driver");
		return DriverManager.getConnection(url, user, pass);
	}
	
	private java.sql.Date getBirthday(String birthday) throws ParseException {
		SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd");
		java.util.Date utilDate = sf.parse(birthday);
		Calendar cal = Calendar.getInstance();
		cal.setTime(utilDate);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return new java.sql.Date(cal.getTimeInMillis());
	}
}
			
		

実行結果

			
* select person table *
1, 山田 太郎, 1997-09-24
2, 佐藤 太郎, 1980-03-04
3, 山田 花子, 1990-10-29
* select person table *
1, 山田 太郎, 1997-09-24
2, 佐藤 太郎, 1980-03-04
3, 山田 華子, 1991-10-30
* select person table *