Dbutils-quick-guide
Apache Commons DBUtils-概要
Apache Commons DbUtilsライブラリは、リソースリークなしでJDBC呼び出し処理を簡単にし、コードをクリーンにするために設計された非常に小さなクラスのセットです。 JDBCリソースのクリーンアップは非常に面倒でエラーが発生しやすいため、DBUtilsクラスはボイラープレートコードを抽象化して、開発者がデータベース関連の操作のみに集中できるようにします。
DBUtilsを使用する利点
- *リソースリークなし-DBUtilsクラスは、リソースリークが発生しないようにします。
- Clean&Clear code -DBUtilsクラスは、クリーンアップまたはリソースリーク防止コードを記述することなく、データベース操作を実行するためのクリーンでクリアなコードを提供します。
- Bean Mapping -DBUtilsクラスは、結果セットからjavabeansを自動的に生成することをサポートします。
DBUtilsの設計原則
- Small -DBUtilsライブラリはサイズが非常に小さく、クラスが少ないため、理解と使用が簡単です。
- Transparent -DBUtilsライブラリは、背後で多くの作業を行っていません。 クエリを実行して実行するだけです。
- 高速-DBUtilsライブラリクラスは多くのバックグラウンドオブジェクトを作成せず、データベース操作の実行が非常に高速です。
Commons DBUtils-環境のセットアップ
DBUtilsを使用して開発を開始するには、以下に示す手順に従ってDBUtils環境をセットアップする必要があります。 Windowsプラットフォームで作業していることを前提としています。
Javaをインストールする
Java Official SiteからJ2SE Development Kit 5.0(JDK 5.0)をインストールします。
以下に説明するように、次の環境変数が設定されていることを確認してください-
- JAVA_HOME -この環境変数は、JDKをインストールしたディレクトリを指している必要があります。 C:\ Program Files \ Java \ jdk1.5.0。
- CLASSPATH -この環境変数には適切なパスが設定されている必要があります。 C:\ Program Files \ Java \ jdk1.5.0_20 \ jre \ lib
- PATH -この環境変数は、適切なJREビンを指す必要があります。 C:\ Program Files \ Java \ jre1.5.0_20 \ bin
これらの変数は既に設定されている可能性がありますが、確認する方法は次のとおりです。
- コントロールパネルに移動し、[システム]をダブルクリックします。 Windows XPユーザーの場合、システムアイコンが表示される前にパフォーマンスとメンテナンスを開く必要がある可能性があります。
- [詳細設定]タブに移動し、[環境変数]をクリックします。
- 次に、上記のすべての変数が適切に設定されているかどうかを確認します。
データベースをインストールする
もちろん、必要な最も重要なことは、クエリと変更が可能なテーブルを備えた実際に実行中のデータベースです。
最適なデータベースをインストールしてください。 あなたはたくさんの選択肢を持つことができ、最も一般的なのは-
- * MySQL DB:* MySQLはオープンソースのデータベースです。 MySQL Official Siteからダウンロードできます。 完全なWindowsインストールをダウンロードすることをお勧めします。 +さらに、https://dev.mysql.com/downloads/gui-tools/[MySQL Administrator]およびhttps://dev.mysql.com/downloads/gui-tools/[MySQL Query Browser ]。 これらは、開発をはるかに簡単にするGUIベースのツールです。 +最後に、https://dev.mysql.com/downloads/connector/j/3.1l [MySQL Connector/J](MySQL JDBCドライバー)をダウンロードして、便利なディレクトリに解凍します。 このチュートリアルの目的上、ドライバーはC:\ Program Files \ MySQL \ mysql-connector-java-5.1.8にインストールされていると仮定します。 +したがって、CLASSPATH変数をC:\ Program Files \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jarに設定します。 ドライバのバージョンはインストールに応じて異なる場合があります。
- * PostgreSQL DB:* PostgreSQLはオープンソースのデータベースです。 PostgreSQL公式サイトからダウンロードできます。 + Postgresのインストールには、pgAdmin IIIと呼ばれるGUIベースの管理ツールが含まれています。 JDBCドライバーもインストールの一部として含まれています。
- Oracle DB -Oracle DBは、Oracleが販売する商用データベースです。 インストールに必要な配布メディアがあることを前提としています。 + Oracleのインストールには、Enterprise Managerと呼ばれるGUIベースの管理ツールが含まれています。 JDBCドライバーもインストールの一部として含まれています。
データベースドライバーのインストール
最新のJDKには、JDBC APIを使用するプログラマーがほとんどのOpen Database Connectivity(ODBC)ドライバーを利用できるようにするJDBC-ODBCブリッジドライバーが含まれています。
現在、ほとんどのデータベースベンダーは、データベースのインストールとともに適切なJDBCドライバーを提供しています。 したがって、この部分について心配する必要はありません。
データベース資格情報の設定
このチュートリアルでは、MySQLデータベースを使用します。 上記のデータベースのいずれかをインストールすると、その管理者IDが root に設定され、選択したパスワードを設定するためのプロビジョニングが提供されます。
ルートIDとパスワードを使用して、別のユーザーIDとパスワードを作成するか、JDBCアプリケーションにルートIDとパスワードを使用できます。
データベースの作成や削除など、管理者IDとパスワードが必要なさまざまなデータベース操作があります。
JDBCチュートリアルの残りの部分では、IDとして username を使用し、パスワードとして password を使用してMySQLデータベースを使用します。
新しいユーザーを作成するための十分な特権がない場合は、データベース管理者(DBA)に依頼して、ユーザーIDとパスワードを作成してもらうことができます。
データベースを作成する
*emp* データベースを作成するには、次の手順を使用します-
ステップ1
- コマンドプロンプト*を開き、次のようにインストールディレクトリに変更します-
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
注意: mysqld.exe へのパスは、システム上のMySQLのインストール場所によって異なる場合があります。 データベースサーバーの起動と停止の方法に関するドキュメントを確認することもできます。
ステップ2
まだ実行されていない場合は、次のコマンドを実行してデータベースサーバーを起動します。
C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>
ステップ3
次のコマンドを実行して emp データベースを作成します-
C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>
テーブルを作成
empデータベースに*従業員*テーブルを作成するには、次の手順を使用します-
ステップ1
- コマンドプロンプト*を開き、次のようにインストールディレクトリに変更します-
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
ステップ2
次のようにデータベースにログインします-
C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>
ステップ3
次のようにテーブル*従業員*を作成します-
mysql> use emp;
mysql> create table Employees
-> (
-> id int not null,
-> age int not null,
-> first varchar (255),
-> last varchar (255)
-> );
Query OK, 0 rows affected (0.08 sec)
mysql>
データレコードを作成する
最後に、次のようにEmployeeテーブルにいくつかのレコードを作成します-
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)
mysql>
MySQLデータベースの完全な理解については、リンク:/mysql/index [MySQLチュートリアル]をご覧ください。
Commons DBUtilsアーカイブをダウンロードする
Apache Common DBUtils jarファイルの最新バージョンをhttps://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi[commons-dbutils-1.7-bin.zip]、MySqlコネクターhttps://mvnrepositoryからダウンロードします。 com/artifact/mysql/mysql-connector-java [mysql-connector-java-5.1.28-bin.jar]、Apache Commons DBCP https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi [ commons-dbcp2-2.1.1-bin.zip]、Apache Commons Pool commons-pool2-2.4.3-bin.zipおよびApache Commons Logging commons-logging-1.2-bin.zip このチュートリアルを書いている時点で、commons-dbutils-1.7-bin.zip _、 mysql-connector-java-5.1.28-bin.jar 、 commons-dbcp2-2.1.1-bin.zip 、 commons-pool2をダウンロードしています。 -2.4.3-bin.zip 、 commons-logging-1.2-bin.zip_をC:\> Apacheフォルダーにコピーしました。
OS | Archive name |
---|---|
Windows | commons-dbutils-1.7-bin.zip |
Linux | commons-dbutils-1.7-bin.tar.gz |
Mac | commons-dbutils-1.7-bin.tar.gz |
Apache Common DBUtils環境を設定する
*APACHE_HOME* 環境変数を設定して、マシン上のApache jarが保存されているベースディレクトリの場所を指すようにします。 次のように、さまざまなオペレーティングシステムのApacheフォルダーにcommons-dbutils-1.7-bin.zipを抽出したと仮定します。
OS | Output |
---|---|
Windows | Set the environment variable APACHE_HOME to C:\Apache |
Linux | export APACHE_HOME=/usr/local/Apache |
Mac | export APACHE_HOME=/Library/Apache |
CLASSPATH変数を設定する
共通IO jarの場所を指すように CLASSPATH 環境変数を設定します。 次のように、さまざまなオペレーティングシステムのApacheフォルダーにcommons-dbutils-1.7-bin.zipを保存していると仮定します。
OS | Output |
---|---|
Windows | Set the environment variable CLASSPATH to %CLASSPATH%;%APACHE_HOME%\commons-dbutils-1.7.jar;mysql-connector-java-5.1.28.jar;commons-dbcp2-2.1.1.jar;commons-pool2-2.4.3.jar;commons-logging-1.2.jar; |
Linux | export CLASSPATH=$CLASSPATH:$APACHE_HOME/commons-dbutils-1.7.jar:mysql-connector-java-5.1.28.jar:commons-dbcp2-2.1.1:commons-pool2-2.4.3.jar:commons-logging-1.2.jar. |
Mac | export CLASSPATH=$CLASSPATH:$APACHE_HOME/commons-dbutils-1.7.jar:mysql-connector-java-5.1.28:commons-dbcp2-2.1.1.jar:commons-pool2-2.4.3.jar;commons-logging-1.2.jar. |
これで、DBUtilsの実験を開始する準備が整いました。 次の章では、DBUtilsプログラミングのサンプル例を示します。
Apache Commons DBUtils-最初のアプリケーション
この章では、DBUtilsライブラリを使用して簡単なJDBCアプリケーションを作成する方法の例を示します。 これは、データベース接続を開き、SQLクエリを実行し、結果を表示する方法を示します。
このテンプレートの例に記載されているすべての手順は、このチュートリアルの後続の章で説明されます。
JDBCアプリケーションの作成
JDBCアプリケーションの構築には、次の6つの手順が含まれます-
- パッケージのインポート-データベースプログラミングに必要なJDBCクラスを含むパッケージを含める必要があります。 ほとんどの場合、_import java.sql。* _を使用すれば十分です。
- * JDBCドライバーの登録*-データベースとの通信チャネルを開くことができるように、ドライバーを初期化する必要があります。
- 接続を開く-_DriverManager.getConnection()_メソッドを使用して、データベースとの物理接続を表すConnectionオブジェクトを作成する必要があります。
- クエリの実行-SQLステートメントを構築してデータベースに送信するには、Statementタイプのオブジェクトを使用する必要があります。
- 結果セットからデータを抽出-適切な_ResultSet.getXXX()_メソッドを使用して結果セットからデータを取得する必要があります。
- 環境をクリーンアップ-JVMのガベージコレクションに依存するのではなく、すべてのデータベースリソースを明示的に閉じる必要があります。
サンプルコード
このサンプル例は、将来的に独自のJDBCアプリケーションを作成する必要がある場合に*テンプレート*として使用できます。
このサンプルコードは、前の章で行った環境とデータベースのセットアップに基づいて記述されています。
MainApp.javaに次の例をコピーして貼り付け、コンパイルして次のように実行します-
MainApp.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
Employee.java
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
今、私たちは次のように上記の例をコンパイルしましょう-
C:\>javac MainApp.java Employee.java
C:\>
*MainApp* を実行すると、次の結果が生成されます-
C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>
Apache Commons DBUtils-クエリの作成
次の例は、DBUtilsの助けを借りて挿入クエリを使用してレコードを作成する方法を示します。 Employeesテーブルにレコードを挿入します。
構文
String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");
どこで、
- insertQuery -プレースホルダーを持つクエリを挿入します。
- queryRunner -データベースに従業員オブジェクトを挿入するQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、挿入クエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int insertedRecords = queryRunner.update(conn,
"INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)",
104,30, "Sohan","Kumar");
System.out.println(insertedRecords + " record(s) inserted");
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
1 record(s) inserted.
Apache Commons DBUtils-クエリの読み取り
次の例は、DBUtilsを使用して読み取りクエリを使用してレコードを読み取る方法を示します。 Employeesテーブルからレコードを読み取ります。
構文
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
どこで、
- resultHandler -結果セットをEmployeeオブジェクトにマップするResultSetHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler =
new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
resultHandler, 104);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 104, Age: 30, First: Sohan, Last: Kumar
Apache Commons DBUtils-更新クエリ
次の例は、DBUtilsの助けを借りて、更新クエリを使用してレコードを更新する方法を示します。 Employeesテーブルのレコードを更新します。
構文
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);
どこで、
- updateQuery -プレースホルダーを持つクエリを更新します。
- queryRunner -データベースの従業員オブジェクトを更新するQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、更新クエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int updatedRecords = queryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,104);
System.out.println(updatedRecords + " record(s) updated.");
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
1 record(s) updated.
Apache Commons DBUtils-クエリの削除
次の例は、DBUtilsの助けを借りて、削除クエリを使用してレコードを削除する方法を示します。 Employeesテーブルのレコードを削除します。
構文
String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);
どこで、
- deleteQuery -プレースホルダーを持つクエリを削除します。
- queryRunner -データベース内の従業員オブジェクトを削除するQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、削除クエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int deletedRecords = queryRunner.update(conn,
"DELETE from employees WHERE id=?", 104);
System.out.println(deletedRecords + " record(s) deleted.");
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
1 record(s) deleted.
Commons DBUtils-QueryRunnerインターフェイス
*org.apache.commons.dbutils.QueryRunner* クラスは、DBUtilsライブラリの中心的なクラスです。 ResultSetを処理するためのプラグ可能な戦略でSQLクエリを実行します。 このクラスはスレッドセーフです。
クラス宣言
以下は、org.apache.commons.dbutils.QueryRunnerクラスの宣言です-
public class QueryRunner
extends AbstractQueryRunner
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-QueryRunnerオブジェクトメソッドを使用して、データベース操作を行います。
例
次の例は、QueryRunnerクラスを使用してレコードを読み取る方法を示します。 従業員テーブルの利用可能なレコードの1つを読み取ります。
構文
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp =
queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
どこで、
- resultHandler -結果セットをEmployeeオブジェクトにマップするResultSetHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 103, Age: 28, First: Sumit, Last: Mittal
AsyncQueryRunnerインターフェイス
*org.apache.commons.dbutils.AsyncQueryRunner* クラスは、非同期サポートで長時間実行されるSQLクエリを実行するのに役立ちます。 このクラスはスレッドセーフです。 このクラスはQueryRunnerと同じメソッドをサポートしていますが、後で結果を取得するために使用できるCallableオブジェクトを返します。
クラス宣言
以下は、org.apache.commons.dbutils.AsyncQueryRunnerクラスの宣言です-
public class AsyncQueryRunner
extends AbstractQueryRunner
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-AsyncQueryRunnerオブジェクトメソッドを使用して、データベース操作を行います。
例
次の例は、AsyncQueryRunnerクラスを使用してレコードを更新する方法を示します。 従業員テーブルで利用可能なレコードの1つを更新します。
構文
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
どこで、
- updateQuery -プレースホルダーを持つクエリを更新します。
- asyncQueryRunner -データベース内の従業員オブジェクトを更新するasyncQueryRunnerオブジェクト。
- future -後で結果を取得するFutureオブジェクト。
DBUtilsに関連する上記の概念を理解するために、非同期モードで更新クエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.AsyncQueryRunner;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws
SQLException, InterruptedException,
ExecutionException, TimeoutException {
Connection conn = null;
AsyncQueryRunner asyncQueryRunner = new AsyncQueryRunner( Executors.newCachedThreadPool());
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
Future<Integer> future = null;
try {
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
Integer updatedRecords = future.get(10, TimeUnit.SECONDS);
System.out.println(updatedRecords + " record(s) updated.");
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
1 record(s) updated.
ResultSetHandlerインターフェース
*org.apache.commons.dbutils.ResultSetHandler* インターフェースは、ResultSetをオブジェクトに変換します。
クラス宣言
以下は、org.apache.commons.dbutils.ResultSetHandlerクラスの宣言です-
public interface ResultSetHandler<T>
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-ResultSetHandlerの実装を作成します。
- *ステップ3 *-resultSetHandlerをQueryRunnerオブジェクトに渡し、データベース操作を行います。
例
次の例は、ResultSetHandlerクラスを使用してレコードをマップする方法を示します。 Employee Tableで利用可能なレコードの1つを読み取ります。
構文
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
どこで、
- resultHandler -結果セットをEmployeeオブジェクトにマップするResultSetHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Arrays;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Object[]> handler = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};
try {
Object[] result = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
handler, 103);
//Display values
System.out.print("Result: " + Arrays.toString(result));
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
Connecting to database...
Result: [103, 33, Sumit, Mittal]
Commons DBUtils-BeanHandlerクラス
*org.apache.commons.dbutils.BeanHandler* はResultSetHandlerインターフェースの実装であり、最初のResultSet行をJavaBeanに変換します。 このクラスはスレッドセーフです。
クラス宣言
以下は、org.apache.commons.dbutils.BeanHandlerクラスの宣言です-
public class BeanHandler<T>
extends Object implements ResultSetHandler<T>
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-ResultSetHandlerの実装をBeanHandlerオブジェクトとして取得します。
- *ステップ3 *-resultSetHandlerをQueryRunnerオブジェクトに渡し、データベース操作を行います。
例
次の例は、BeanHandlerクラスを使用してレコードを読み取る方法を示します。 Employeesテーブルで利用可能なレコードの1つを読み取り、Employee Beanにマッピングします。
構文
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
どこで、
- resultHandler -結果セットをEmployeeオブジェクトにマップするBeanHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler
= new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 103, Age: 28, First: Sumit, Last: Mittal
Commons DBUtils-BeanListHandlerクラス
*org.apache.commons.dbutils.BeanListHandler* はResultSetHandlerインターフェースの実装であり、ResultSet行をJava Beanのリストに変換します。 このクラスはスレッドセーフです。
クラス宣言
以下は、org.apache.commons.dbutils.BeanListHandlerクラスの宣言です-
public class BeanListHandler<T>
extends Object implements ResultSetHandler<List<T>>
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-ResultSetHandlerの実装をBeanListHandlerオブジェクトとして取得します。
- *ステップ3 *-resultSetHandlerをQueryRunnerオブジェクトに渡し、データベース操作を行います。
例
次の例は、BeanListHandlerクラスを使用してレコードのリストを読み取る方法を示します。 Employeesテーブルで利用可能なレコードを読み取り、それらをEmployee Beanのリストにマッピングします。
構文
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
どこで、
- resultHandler -結果セットをEmployeeオブジェクトのリストにマップするBeanListHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle List of Employee Beans
ResultSetHandler<List<Employee>> resultHandler = new BeanListHandler<Employee>(Employee.class);
try {
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
for(Employee emp: empList ) {
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
Commons DBUtils-ArrayListHandlerクラス
*org.apache.commons.dbutils.ArrayListHandler* はResultSetHandlerインターフェースの実装であり、ResultSet行をobject []に変換する役割を果たします。 このクラスはスレッドセーフです。
クラス宣言
以下は、org.apache.commons.dbutils.ArrayListHandlerクラスの宣言です-
public class ArrayListHandler
extends AbstractListHandler<Object[]>
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-ArraySetHandlerオブジェクトとしてResultSetHandlerの実装を取得します。
- *ステップ3 *-resultSetHandlerをQueryRunnerオブジェクトに渡し、データベース操作を行います。
例
次の例は、ArrayListHandlerクラスを使用してレコードのリストを読み取る方法を示します。 Employeesテーブルの利用可能なレコードをobject []として読み取ります。
構文
List<Object> result = queryRunner.query(conn, "SELECT * FROM employees", new ArrayListHandler());
どこで、
- resultHandler -結果セットをobject []のリストにマッピングするArrayListHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
List<Object[]> result = queryRunner.query(conn, "SELECT * FROM employees"
, new ArrayListHandler());
for(Object[] objects : result) {
System.out.println(Arrays.toString(objects));
}
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]
Commons DBUtils-MapListHandlerクラス
*org.apache.commons.dbutils.MapListHandler* はResultSetHandlerインターフェースの実装であり、ResultSet行をマップのリストに変換する役割を果たします。 このクラスはスレッドセーフです。
クラス宣言
以下は、org.apache.commons.dbutils.MapListHandlerクラスの宣言です-
public class MapListHandler
extends AbstractListHandler<Map<String,Object>>
使用法
- *ステップ1 *-接続オブジェクトを作成します。
- *ステップ2 *-ResultSetHandlerの実装をMapListHandlerオブジェクトとして取得します。
- *ステップ3 *-resultSetHandlerをQueryRunnerオブジェクトに渡し、データベース操作を行います。
例
次の例は、MapListHandlerクラスを使用してレコードのリストを読み取る方法を示します。 マップのリストとして、Employeesテーブルの利用可能なレコードを読み取ります。
構文
List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());
どこで、
- resultHandler -結果セットをマップのリストにマップするMapListHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
List<Map<String, Object>> result
= queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());
System.out.println(result);
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
Connecting to database...
[{id=100, age=18, first=Zara, last=Ali},
{id=101, age=25, first=Mahnaz, last=Fatma},
{id=102, age=30, first=Zaid, last=Khan},
{id=103, age=33, first=Sumit, last=Mittal}]
Apache Commons DBUtils-カスタムハンドラー
ResultSetHandlerインターフェースを実装するか、ResultSetHandlerの既存の実装を拡張することにより、独自のカスタムハンドラーを作成できます。 以下の例では、BeanHandlerクラスを拡張して、カスタムハンドラーEmployeeHandlerを作成しました。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下は EmployeeHandler.java ファイルの内容です。
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class EmployeeHandler extends BeanHandler<Employee> {
public EmployeeHandler() {
super(Employee.class);
}
@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();
try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
employeeHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 103, Age: 28, Name: Sumit, Mittal
Commons DBUtils-カスタム行プロセッサー
データベーステーブルの列名と同等のjavabeanオブジェクト名が類似していない場合、カスタマイズされたBasicRowProcessorオブジェクトを使用してそれらをマップできます。 下記の例をご覧ください。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以下は EmployeeHandler.java ファイルの内容です。
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.BasicRowProcessor;
public class EmployeeHandler extends BeanHandler<Employee> {
public EmployeeHandler() {
super(Employee.class, new BasicRowProcessor(new BeanProcessor(mapColumnsToFields())));
}
@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
public static Map<String, String> mapColumnsToFields() {
Map<String, String> columnsToFieldsMap = new HashMap<>();
columnsToFieldsMap.put("ID", "id");
columnsToFieldsMap.put("AGE", "age");
return columnsToFieldsMap;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();
try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
employeeHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} finally {
DbUtils.close(conn);
}
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 103, Age: 28, Name: Sumit, Mittal
Commons DBUtils-DataSourceの使用
これまで、QueryRunnerの使用中に接続オブジェクトを使用しました。 データソースをシームレスに使用することもできます。 次の例は、QueryRunnerとデータソースを使用して、読み取りクエリを使用してレコードを読み取る方法を示します。 Employeesテーブルからレコードを読み取ります。
構文
QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
どこで、
- dataSource -構成されたDataSourceオブジェクト。
- resultHandler -結果セットをEmployeeオブジェクトにマップするResultSetHandlerオブジェクト。
- queryRunner -データベースから従業員オブジェクトを読み取るQueryRunnerオブジェクト。
DBUtilsに関連する上記の概念を理解するために、読み取りクエリを実行する例を作成しましょう。 サンプルを作成するには、サンプルアプリケーションを作成しましょう。
Step | Description |
---|---|
1 | Update the file MainApp.java created under chapter DBUtils - First Application. |
2 | Compile and run the application as explained below. |
以下は Employee.java の内容です。
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
以下は CustomDatasource.java の内容です。
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
public class CustomDataSource {
//JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
private static DataSource datasource;
private static final BasicDataSource basicDataSource;
static {
basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName(JDBC_DRIVER);
basicDataSource.setUsername(USER);
basicDataSource.setPassword(PASS);
basicDataSource.setUrl(DB_URL);
}
public static DataSource getInstance() {
return basicDataSource;
}
}
以下は MainApp.java ファイルの内容です。
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
public static void main(String[] args) throws SQLException {
DbUtils.loadDriver(JDBC_DRIVER);
QueryRunner run = new QueryRunner(CustomDataSource.getInstance());
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query("SELECT * FROM employees WHERE id=?",
resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
}
ソースファイルの作成が完了したら、アプリケーションを実行します。 アプリケーションで問題がなければ、次のメッセージが出力されます。
ID: 103, Age: 33, First: Sumit, Last: Mittal