JavaからMySQLへ接続する方法とサンプルコード
ズバット引越し比較
Posted on 2021/6/5 at 3:14
MySQLは世界で最も普及している、オープンソースデータベースとして有名です。 私も勤務先でいくつか業務アプリケーションを作成し運用していますが、 最大で約32万行のデータが入っていますが安定した稼働を維持しております。
今回はJavaからMySQLへ接続してデータを入力し、そのデータを取得するまでを説明します。
JDBCドライバを取得しアプリケーションに組み込む
JavaからMySQLへ接続するにはJDBCドライバを取得し、アプリケーションに組み込む必要があります。以下の2通りの方法があります。
- JDBCドライバのダウンロードサイトから直接ドライバをダウンロードし、手動でアプリケーションに組み込む。
- 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に以下の項目を追加します。
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 *