☕
JDBCの実行【基礎】
MySQLとEclipseを使ってデータベースへの接続処理をやってみます。
SQL
データベース用のデータには次のSQLを使います。
艦これが好きなので艦娘の情報にしました。
create database if not exists demo;
use demo;
drop table if exists kanmusu;
CREATE TABLE `kanmusu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`ship_classification` varchar(64) DEFAULT NULL,
`abbreviations` varchar(64) DEFAULT NULL,
`sister` varchar(64) DEFAULT NULL,
`level` INT(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (1, 'Hamakaze', 'Destroyer', 'DD', 'Urakaze', 153);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (2, 'Kitakami', 'Light Cruiser', 'CL', 'Oi', 133);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (3, 'Abukuma', 'Light Cruiser', 'CL', 'Nagara', 133);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (4, 'Shimakaze', 'Destroyer', 'DD', NULL, 131);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (5, 'Zuikaku', 'Aircraft Carrier', 'CV', 'Shoukaku', 130);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (6, 'Shoukaku', 'Aircraft Carrier', 'CV', 'Zuikaku', 129);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (7, 'Tone', 'Flying-Deck Cruiser', 'CF', 'Chikuma', 127);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (8, 'Maya', 'Heavy Cruise', 'CA', 'Choukai', 125);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (9, 'Husou', 'Battleship', 'BB', 'Yamashiro', 122);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (10, 'Musashi', 'Battleship', 'BB', 'Yamato', 122);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (11, 'Ise', 'Battleship', 'BB', 'Hyuga', 121);
INSERT INTO `kanmusu` (`id`, `name`, `ship_classification`, `abbreviations`, `sister`, `level`) VALUES (12, 'Saratoga', 'Aircraft Carrier', 'CV', 'Lexington', 121);
MySQL Workbenchで新しいユーザーを作成して↑のSQLを読み込みます。
次に、以下SQLを実行して正しく表示されるかを確認します。
SELECT * FROM demo.kanmusu
こんな感じになればOK
Eclipseからデータベースに接続する
EclipseでJDBCを使うためにMySQLコネクタをEclipseに読み込みます。
手順は次の通り
- このページ (https://www.mysql.com/jp/products/connector/)からJDBC Driver for MySQL (Connector/J)のダウンロードを選択
- Select Operating SystemでPlatform Independentを選択
- Platform Independent (Architecture Independent), ZIP Archiveのダウンロードをクリック
- 次のページではログインしなくて良いので下のNo thanks, just start my download.をクリック
- ダウンロードが終わったらzipを解凍する
- ファイル内のmysql-connector-java-XXXXXをコピーする
- コピーしたものをEclipseで作成したプロジェクトにペーストする
- Add JARsで先程のJARファイルをプロジェクトに追加する
これで準備完了です。
Javaのコード
import java.sql.*;
public class JdbcTest {
public static void main(String[] args) throws SQLException {
Connection myConn = null;
Statement myStmt = null;
ResultSet myRs = null;
String dbUrl = "jdbc:mysql://localhost:3306/demo";
String user = "student";
String pass = "studentpassword";
try {
// 1. データベースに接続する
myConn = DriverManager.getConnection(dbUrl, user, pass);
// 2. ステートメントを作る
myStmt = myConn.createStatement();
// 3. SQLクエリを実行する
myRs = myStmt.executeQuery("select * from kanmusu");
// 4. リザルトセットを処理する
while (myRs.next()) {
System.out.println(myRs.getString("name") + " is Lv. " + myRs.getString("level")); // 行からデータを取得
}
} catch (Exception exc) {
exc.printStackTrace();
} finally {
if (myRs != null) {
myRs.close(); // 利用しなくなったデータベースへの接続を切断する
}
if (myStmt != null) {
myStmt.close();
}
if (myConn != null) {
myConn.close();
}
}
}
}
実行するとこんな感じになります。
Hamakaze is Lv. 153
Kitakami is Lv. 133
Abukuma is Lv. 133
Shimakaze is Lv. 131
Zuikaku is Lv. 130
Shoukaku is Lv. 129
Tone is Lv. 127
Maya is Lv. 125
Husou is Lv. 122
Musashi is Lv. 122
Ise is Lv. 121
Saratoga is Lv. 121
参考
- next() メソッドについて
https://www.atmarkit.co.jp/ait/articles/0107/11/news001.html - printStackTraceについて
https://itsakura.com/java_printstacktrace
Discussion