【JDBC入門】テーブルから特定の列(カラム)だけを取得する方法をわかりやすく解説
JDBCにおけるResultSetインターフェースは、SQLクエリの実行結果として返される表形式のデータを表します。ResultSetは現在の行を指すカーソルを持っており、初期状態ではこのカーソルは最初の行の直前に位置しています。
カーソルはnext()メソッドを使って次の行へ移動でき、行内の各列の値は、ResultSetインターフェースが提供するゲッターメソッド(getInt()、getString()、getDate()など)を使って取得できます。
テーブルから特定の列を取得する手順
テーブルから必要なデータを取得するには、以下の手順を実行します。
- データベースに接続する
- Statementオブジェクトを作成する
- executeQuery()メソッドでSELECT文を実行する。引数には文字列形式のSELECTクエリを渡します
すべての列の値を取得する場合は、次のようなクエリを使用します。
Select * from TableName;
一方、特定の列だけを取得したい場合は、「*」の代わりに必要な列名を明示的に指定します。
select Name, DOB from Emp
実行例
ここでは、データベースに以下の構造を持つ「Emp」というテーブルが存在すると仮定します。
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | DOB | date | YES | | NULL | | | Location | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
次のJDBCプログラムは、Empテーブルから従業員の「Name(氏名)」と「DOB(生年月日)」の値を取得する例です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RetrievingParticularColumn {
public static void main(String args[]) throws Exception {
// ドライバの登録
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// データベースへの接続
String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// Statementオブジェクトの作成
Statement stmt = con.createStatement();
// 特定の列のみを取得するクエリの実行
ResultSet rs = stmt.executeQuery("select Name, DOB from Emp");
System.out.println("Contents of the table");
while(rs.next()) {
System.out.print("Name of the Employee: "+rs.getString("Name")+", ");
System.out.print("Date of Birth: "+rs.getDate("DOB"));
System.out.println("");
}
}
}
実行結果
Connection established...... Contents of the table Name of the Employee: Amit, Date of Birth: 1970-01-08 Name of the Employee: Sumith, Date of Birth: 1970-01-08 Name of the Employee: Sudha, Date of Birth: 1970-01-05
補足:列名と列インデックスの指定方法について
ゲッターメソッドでは、上記の例のように列名を指定する方法のほかに、1から始まる列のインデックスを指定する方法もあります。たとえば rs.getString(1) とすれば1列目の値を取得できます。ただし、列名で指定する方がコードの可読性が高く、テーブルの列の並び順が変わった場合にも影響を受けにくいため、一般的には列名での指定が推奨されます。
-
JDBCでデータベースからファイル(CLOB)を取得する方法
JDBCでデータベースからファイルを取得するには?データベースには、ファイルの内容をCLOB型として格納することが一般的です。ResultSetインターフェースには、このCLOB型のデータを取得するためのgetClob()メソッドとgetCharacterStream()メソッドが用意されています。どちらのメソッドも、引数として列のインデックスを表す整数、または列名を表す文字列を受け取り、指定された列の値を取得します。両者の違いは、getClob()メソッドがClobオブジェクトを返すのに対し、getCharacterStream()メソッドはCLOB型の内容を保持するReaderオブジェクト
-
JDBCのgetCharacterStream()メソッドでテーブルからClob値を取得する方法【サンプルコード解説】
JDBCのResultSetインターフェースには、データベースのテーブルからCLOB型(長文テキスト)のデータを取得するためのメソッドとして、getClob()とgetCharacterStream()の2つが用意されています。 どちらのメソッドも、引数に列のインデックスを表す整数(または列名を表す文字列)を指定でき、該当する列の値を取得します。両者の違いは戻り値の型です。getClob()メソッドがjava.sql.Clobオブジェクトを返すのに対し、getCharacterStream()メソッドは文字ストリームを扱うjava.io.Readerクラスのオブジェクトを直接返します。そのため