top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
Java 言語を使って ちょっと複雑なデータ処理をおこないたいときには、インメモリ DB を使って実装すると快適です。 ここでは Java プログラマーの間で人気の h2 データベースを使ったインメモリ DB 利用を Maven ベースで簡単にメモします。
まず、h2 JDBC Driver を Java プロジェクトに追加します。Maven の pom.xml
に以下の記述を追加します。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.196</version>
</dependency>
次に、Java のコードが続きます。JDBC API を使って以下のように記述すると、柔軟なデータ処理が実現できます。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SimpleDbSample {
static {
System.err.println("Loading h2 JDBC Driver");
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException ex) {
throw new IllegalArgumentException("Fail to load h2 driver: " + ex.getMessage(), ex);
}
}
public static void main(final String[] args) throws SQLException {
System.err.println("Connect to inmemory db.");
try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:sfdcjdbc")) {
new SimpleDbSample().process(conn);
}
}
public void process(final Connection conn) throws SQLException {
try (PreparedStatement stmt = conn.prepareStatement(
"CREATE TABLE MY_WORK_TBL (ENTRY_NAME VARCHAR_IGNORECASE NOT NULL, ENTRY_COUNT INTEGER)")) {
stmt.executeUpdate();
}
System.err.println("Preparing data.");
try (PreparedStatement stmt = conn
.prepareStatement("INSERT INTO MY_WORK_TBL (ENTRY_NAME, ENTRY_COUNT) VALUES (?, ?)")) {
for (int index = 0; index < 10; index++) {
stmt.setString(1, "ENTRY" + index);
stmt.setInt(2, index);
stmt.executeUpdate();
}
}
System.err.println("Searching data.");
try (PreparedStatement stmt = conn
.prepareStatement("SELECT ENTRY_NAME, ENTRY_COUNT FROM MY_WORK_TBL ORDER BY ENTRY_COUNT DESC")) {
try (final ResultSet rs = stmt.executeQuery()) {
for (; rs.next();) {
System.err.println(rs.getString(1) + ":" + rs.getInt(2));
}
}
}
}
}
Java コード内で RDBMS 処理を気軽に実行でるため、これは便利です。
Last modified: $Date: 2017-09-29 $