jdbc resultset how use java resultset retrieve data
このチュートリアルでは、JDBCResultSetを使用してデータを取得する方法について説明します。また、ResultSetMetaDataおよびDatabaseMetaDataインターフェイスについて例を挙げて学習します。
の中に JDBC DriverManager のチュートリアル JDBCチュートリアルシリーズ 、JavaアプリケーションでJDBCDriverManagerとそのメソッドであるJDBCPreparedStatementを使用する方法を学びました。
このチュートリアルでは、JDBCの残りのインターフェースについて説明します。以前のチュートリアルでは、Statement、PreparedStatement、およびCallableStatementインターフェイスについて説明しました。
ここでは、JDBC ResultSet、ResultSetMetaData、およびDatabaseMetaDataインターフェース、それらのメソッド、およびJavaプログラムでのメソッドの使用方法について学習します。
学習内容:
JDBCResultSetインターフェース
ResultSetインターフェースはjava.sqlパッケージに含まれています。これは、JavaプログラムでSQLステートメントの実行後にデータベーステーブルから返されるデータを格納するために使用されます。 ResultSetのオブジェクトは、結果データにカーソルポイントを維持します。デフォルトでは、カーソルは結果データの最初の行の前に配置されます。
next()メソッドは、カーソルを次の位置に順方向に移動するために使用されます。これ以上レコードがない場合はFALSEを返します。ステートメントオブジェクトのいずれかを使用してexecuteQuery()メソッドを呼び出すことにより、データを取得します。これは、Statement、PreparedStatement、またはCallableStatementオブジェクトの場合があります。 PreparedStatementおよびCallableStatementインターフェースは、Statementインターフェースのサブインターフェースです。
ステートメントインターフェイス
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatementインターフェース
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
getX()メソッドを使用して、結果を反復処理しながら列のデータを取得できます。ここで、X –は列のデータ型です。列名またはインデックスのいずれかを使用して、getX()メソッドを使用して値を取得できます。
while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
getX()メソッドで、列名の代わりに列のインデックス番号を指定することもできます。
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
ResultSetタイプ
デフォルトでは、実行されたSQLステートメントの出力として戻ってきたResultSetのデータ/値を順方向に繰り返すことができます。 Scrollable ResultSetを使用して、他の方向に値を繰り返すことができます。 Statement、PreparedStatement、およびCallableStatementオブジェクトの作成中に、ResultSetのタイプと同時実行性を指定できます。
ResultSetには3つのタイプがあります。彼らです:
- TYPE_FORWARD_ONLY: これはデフォルトのオプションで、カーソルが最初から最後まで、つまり順方向に移動します。
- TYPE_SCROLL_INSENSITIVE: このタイプでは、カーソルが前後方向に移動します。保存されたデータの反復中にデータに変更を加えた場合、誰かがDBのデータを変更しても、データセットは更新されません。データセットには、SQLクエリがデータを返したときのデータが含まれているためです。
- TYPE_SCROLL_SENSITIVE: これはTYPE_SCROLL_INSENSITIVEに似ていますが、SQLクエリがデータを返した後に誰かがデータを更新した場合、それを繰り返すとデータセットへの変更が反映されます。
ResultSetの同時実行性
ResultSetには2つの並行性モードがあります。彼らです:
- ResultSet.CONCUR_READ_ONLY: これはデフォルトの並行性モードです。 ResultSet内のデータのみを読み取ることができます。更新は適用されません。
- ResultSet.CONCUR_UPDATABLE: ResultSetオブジェクトのデータを更新できます。
一部のデータベースは、すべてのResultSetタイプの同時実行モードをサポートしていません。その場合、supportsResultSetConcurrency()メソッドを使用して、目的のタイプと同時実行モードをサポートしているかどうかを確認する必要があります。
ResultSetインターフェイスのメソッド
ResultSetメソッドには4つのカテゴリがあります。彼らです:
- ナビゲーション方法
- ゲッターメソッド
- セッターメソッド
- その他の方法
最初に、ナビゲーション方法について説明し、次にさらに進みます。
#1)ナビゲーション方法
このメソッドは、データセット内でカーソルを移動するために使用されます。
- ブールabsolute(int row): これは、パラメーターに指定されている指定された行にカーソルを移動し、操作が成功した場合はtrueを返し、それ以外の場合はfalseを返すために使用されます。
- 無効afterLast(): ResultSetカーソルを最後の行の後に移動させます。
- Void beforeFirst(): ResultSetカーソルを最初の行の前に移動させます。
- ブール値first(): ResultSetカーソルを最初の行に移動させます。操作が成功した場合はTrueを返し、それ以外の場合はFalseを返します。
- ブールlast(): ResultSetカーソルを最後の行に移動させます。操作が成功した場合はTrueを返し、それ以外の場合はFalseを返します。
- ブールnext(): ResultSetカーソルを次の行に移動させます。レコードが多い場合はTrueを返し、レコードがない場合はFalseを返します。
- ブールprevious(): ResultSetカーソルを前の行に移動させます。操作が成功した場合はTrueを返し、それ以外の場合はFalseを返します。
- ブールrelative(): カーソルを指定された行数だけ順方向または逆方向に移動します。
- Int getRow(): ResultSetオブジェクトが現在指している現在の行番号を返します。
- ボイドmoveToCurrentRow(): 現在挿入行にある場合は、カーソルを現在の行に戻します。
- ボイドmoveToInsertRow(): カーソルを特定の行に移動して、その行をデータベースに挿入します。現在のカーソル位置を記憶しています。したがって、moveToCurrentRow()メソッドを使用して、挿入後にカーソルを現在の行に移動できます。
このチュートリアルでは、すべてのプログラムがJavaで記述されています。 Java8バージョンとOracleDBを使用しました。
>> Oracleソフトウェアはからダウンロードできます ここに
>> Javaバージョン8はからダウンロードできます ここに
ステップバイステップのJavaインストールプロセスがあります。
JDBC ResultSetサンプルプログラム:(ナビゲーションメソッドの使用)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select query String select_query = 'select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:X E')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving the cursor to point first row rs.first(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println('Cursor is pointing at before the first row. Use next() to move in forward direction'); //Moving the cursor to point first row using next() rs.next(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println('Cursor is pointing at after the last row. Use previous() to move in backward direction'); //Moving the cursor to point last row using previous() rs.previous(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println('Cursor is pointing at 3rd row'); System.out.println('THIRD ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println('Cursor is pointing to the 1 row previous to the 3rd row'); System.out.println('Second ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println('Cursor is pointing to the 4th row after the 2nd row'); System.out.println('SIXTH ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point current row System.out.println(' Current Row = ' + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
出力:
Employee_detailsテーブルのデータ
説明:
上記のプログラムでは、resultSetにfirst()、last()、beforeFirst()、afterLast()、next()、previous()、absolute()、relative()、getRow()メソッドを実装しました。これらのメソッドを使用するには、prepareStatementメソッドでResultSet.TYPE_SCROLL_SENSITIVE、ResultSet.CONCUR_UPDATABLEの値を設定します。
次に、ResultSetのGetterメソッドとは何かについて説明します。
#2)ゲッターメソッド
ResultSetは、データベースからのテーブルのデータを保存しました。 Getterメソッドは、ResultSet内のテーブルの値を取得するために使用されます。そのためには、列のインデックス値または列名のいずれかを渡す必要があります。
ResultSetのgetterメソッドは次のとおりです。
- int getInt(int ColumnIndex): これは、指定された列Indexの値をintデータ型として取得するために使用されます。
- float getFloat(int ColumnIndex): これは、指定された列Indexの値をfloatデータ型として取得するために使用されます。
- java.sql.date getDate(int ColumnIndex): これは、指定された列Indexの値を日付値として取得するために使用されます。
- int getInt(String ColumnName): 指定された列の値をintデータ型として取得するために使用されます。
- float getFloat(String ColumnName): 指定された列の値をfloatデータ型として取得するために使用されます。
- Java.sql.date getDate(String ColumnName): 指定された列の値を日付値として取得するために使用されます。
ResultSetインターフェイスにも、すべてのプリミティブデータ型(ブール、long、double)および文字列のゲッターメソッドがあります。データベースからも配列とバイナリタイプのデータを取得できます。そのための方法もあります。
#3)セッター/アップデーターメソッド
ResultSet Updaterメソッドを使用して、データベースの値を更新できます。これはGetterメソッドに似ていますが、ここでは、データベースで更新する特定の列の値/データを渡す必要があります。
ResultSetのアップデータメソッドは次のとおりです。
- void updateInt(int ColumnIndex、int Value): これは、指定された列Indexの値をint値で更新するために使用されます。
- void updateFloat(int ColumnIndex、float f): これは、指定された列Indexの値をfloat値で更新するために使用されます。
- void updateDate(int ColumnIndex、Date d): これは、指定された列Indexの値を日付値で更新するために使用されます。
- void updateInt(String ColumnName、int Value): 指定された列の値を指定されたint値で更新するために使用されます。
- void updateFloat(String ColumnName、float f): これは、指定された列の値を指定されたfloat値で更新するために使用されます。
- Java.sql.date getDate(String ColumnName): これは、指定された列の値を指定された日付値で更新するために使用されます。
ResultSetインターフェイスにも、すべてのプリミティブデータ型(ブール、long、double)および文字列用のアップデータメソッドがあります。
アップデータメソッドは、ResultSetオブジェクトのデータを更新するだけです。 insertRowまたはupdateRowメソッドを呼び出した後、DBで値が更新されます。
行の更新:
updateX()メソッドを呼び出し、列名またはインデックス、および更新する値を渡すことで、行のデータを更新できます。 updateXメソッドでは、Xの代わりに任意のデータ型を使用できます。これまで、ResultSetオブジェクトのデータを更新しました。 DB内のデータを更新するには、updateRow()メソッドを呼び出す必要があります。
行の挿入:
moveToInsertRow()を使用してカーソルを移動し、新しい行を挿入する必要があります。これについては、ナビゲーション方法のセクションですでに説明しました。次に、updateX()メソッドを呼び出して、データを行に追加する必要があります。すべての列のデータを提供する必要があります。そうしないと、その特定の列のデフォルト値が使用されます。
データを更新した後、insertRow()メソッドを呼び出す必要があります。次に、moveToCurrentRow()メソッドを使用して、新しい行の挿入を開始する前の行にカーソル位置を戻します。
ResultSetの例:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub String select_query = 'select empnum,lastName,firstName from employee_details'; String insert_query = 'insert into employee_details values(?,?,?,?,?,?)'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println('LAST ROW: Before inserting new Employee'); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, 'Bond'); //Update FIRST NAME value rs.updateString(3, 'James'); //Insert a new row rs.insertRow(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println('Befor Updating EMPNUM of the 5th ROW'); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); System.out.println(' Updating EMP id of the 5th EMPLOYEE'); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
出力:
説明:
上記のプログラムでは、最初に、SELECTクエリを使用してEmployee_detailsテーブルのデータをResultSetオブジェクトに格納しました。次に、ResultSetのlast()メソッドを使用して、employee_detailsテーブルの最後の行のデータを表示しました。 moveToInsertRow()メソッドは、カーソルを現在の行を指すようにします。現在の行が最後の行になります。
行の値を更新するために使用されるupdateXXX()メソッドとinsertRow()メソッドがデータを新しい行に挿入しました。絶対()メソッドを使用して、5を指すようにカーソルを作成しましたth行。 UpdateInt()メソッドを使用して、EMPNUMを5の新しいIDで更新しました。thテーブルの従業員。その後、EMPNUMが更新されているかどうかを確認するためのデータを表示しました。
last()を使用してテーブルの最後の行を指すようにカーソルを作成し、それを表示しました。上記のロジックを実行するには、prepareStatementメソッドでResultSet.TYPE_SCROLL_INSENSITIVE、ResultSet.CONCUR_UPDATABLEの値を設定する必要があります。
#4)その他の方法
- void close(): これは、ResultSetインスタンスを閉じ、ResultSetインスタンスに関連付けられているリソースを解放するために使用されます。
- ResultSetMetaData getMetaData(): ResultSetMetaDataインスタンスを返します。クエリ出力の列のタイプとプロパティに関する情報があります。 ResultSetMetaDataについては、次のセクションで詳しく説明します。
ResultSetMetaData
メタデータとは何ですか?
メタデータとは、データに関するデータを意味します。このインターフェースを使用して、ResultSetに関する詳細情報を取得します。 java.sqlパッケージで入手できます。すべてのResultSetオブジェクトは、1つのResultSetMetaDataオブジェクトに関連付けられています。
このオブジェクトには、列のデータ型、列名、列数、テーブル名、スキーマ名など、列のプロパティの詳細が含まれます。ResultSetのgetMetaData()メソッドを使用してResultSetMetaDataオブジェクトを取得できます。
ResultSetMetaDataの構文:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaDataインターフェイスの重要なメソッド:
メソッド名 | 説明 |
---|---|
boolean isCaseSensitive(int Column) | 指定された列で大文字と小文字が区別される場合はtrueを返し、そうでない場合はfalseを返します。 |
文字列getColumnName(int column) | 特定の列の列名を返します |
文字列getColumnTypeName(int column) | パラメータとして渡した特定の列のデータ型を返します |
文字列getTableName(int列) | 列のテーブル名を返します |
文字列getSchemaName(int column) | 列のテーブルのスキーマ名を返します |
int getColumnCount() | ResultSetの列数を返します |
ブールisAutoIncrement(int Column) | 指定された列が自動インクリメントの場合はtrueを返し、そうでない場合はfalseを返します。 |
ResultSetMetaDataの例
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= ' select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(' We are using ResultSetMetaData '); System.out.println('No: of Columns: '+ rsmd.getColumnCount()); System.out.println('ColumnName of Column 1: '+ rsmd.getColumnName(1)); System.out.println('Data Type of Column 2: ' + rsmd.getColumnTypeName(2)); System.out.println('Table Name of the Column 1: ' + rsmd.getTableName(1)); System.out.println('Schema Name of the Column 1: ' + rsmd.getSchemaName(1)); } } }
出力:
説明:
自動化テスト面接の質問と回答pdf
上記のプログラムでは、ResultSetMetaDataインターフェイスにgetColumnCount()、getColumnName()、getColumnTypeName()、getTableName()、およびgetSchemaName()メソッドを実装しました。
DatabaseMetaData
DatabaseMetaDataインターフェースは、DatabaseName、データベースバージョンなどのデータベースに関する情報を提供します。
DatabaseMetaDataインターフェースの重要なメソッド:
メソッド名 | 説明 |
---|---|
文字列getStringFunctions() | 接続されたデータベースで使用可能な文字列関数のリストを返します |
文字列getDriverName() | Javaプログラムで使用しているJDBCドライバーの名前が返されます |
文字列getDriverVersion() | JDBCドライバーのバージョン番号を返します |
文字列getUserName() | 使用しているデータベースのユーザー名を返します |
文字列getDatabaseProductName() | 使用しているデータベースの名前を返します |
文字列getDatabaseProductVersion() | 使用しているデータベースのバージョン番号を返します |
ResultSet getSchemas() | 接続されたデータベースで使用可能なスキーマの名前を返します |
文字列getTimeDateFunctions() | 接続されたデータベースで使用可能な時刻と日付の関数のリストを返します |
文字列getURL() | データベースのURLを返します |
ブールisReadOnly() | データベースが読み取り専用モードであるかどうかを返します |
ブールsupportsBatchUpdates() | データベースがバッチ更新をサポートしているかどうかを返します |
ブールサポートSavepoints() | データベースがセーブポイントをサポートしているかどうかを返します |
ブールsupportsStatementPooling() | データベースがステートメントプーリングをサポートしているかどうかを返します |
ブールsupportsStoredProcedures() | データベースがストアドプロシージャをサポートしているかどうかを返します |
ブールsupportsOuterJoins() | データベースが外部結合をサポートしているかどうかを返します |
ここでは、DatabaseMetaDataインターフェイスのいくつかの重要なメソッドをリストしました。あなたはの公式サイトを参照することができます オラクル ここで、DatabaseMetaDataインターフェースで使用可能なすべてのメソッドを確認できます。
DatabaseMetaDataの例:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName('oracle.jdbc.driver.OracleDriver'); Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println('Using DatabaseMetaData'); System.out.println('Driver Name: ' + dbmd.getDriverName()); System.out.println('Driver Version: '+ dbmd.getDriverVersion()); System.out.println('UserName of the Database: ' + dbmd.getUserName()); System.out.println('Database Product Name:' + dbmd.getDatabaseProductName()); System.out.println('Database Product Version: ' + dbmd.getDatabaseProductVersion()); System.out.println('List of String Functions in the Database: ' + dbmd.getStringFunctions()); System.out.println('List of Time & Date functions in the Database: ' + dbmd.getTimeDateFunctions()); System.out.println('URL of the Database: ' + dbmd.getURL()); System.out.println('Database is read - only? ' +dbmd.isReadOnly()); System.out.println('Support Batch Updates? ' + dbmd.supportsBatchUpdates()); System.out.println('Support savepoints? ' + dbmd.supportsSavepoints()); System.out.println('Support Statement Pooling? '+ dbmd.supportsStatementPooling()); System.out.println('Support Stored Procedures? ' + dbmd.supportsStoredProcedures()); System.out.println('Support Outer Join? '+ dbmd.supportsOuterJoins()); } }
出力:
説明:
上記のプログラムでは、getDriverName()、getDriverVersion()、getUserName()、getDatabaseProductName()、getDatabaseProductVersion()、getStringFunctions()、getTimeDateFunctions()、getURL()、isReadOnly()、supportsBatchUpdates()を使用/実装しました。 、supportsStatementPooling()、supportsSavepoints()、supportsStoredProcedures()、およびDatabaseMetaDataインターフェイスのsupportsOuterJoins()メソッド。
注意点:
- JDBC ResultSetインターフェースは、データベースからのデータを保管し、それをJavaプログラムで使用するために使用されます。
- ResultSetを使用して、updateXXX()メソッドを使用してデータを更新することもできます。
- ResultSetオブジェクトは、結果データの最初の行の前にカーソルを置きます。 next()メソッドを使用して、ResultSetを反復処理できます。
- ResultSetオブジェクト内をさらに移動するためのResultSetのナビゲーションメソッドがあります
- ResultMetaDataは、列名、列数、列のデータ型など、ResultSetに関する詳細情報を取得するために使用されます。
- DatabaseMetDataは、接続したデータベースに関する情報を取得するために使用されます
よくある質問
Q#1)ResultSetの用途は何ですか?
回答: ResultSetは、DBからデータを格納および取得するために使用されます。 executeQuery()メソッドが実行されると、ResultSetオブジェクトが返されます。プログラムでそのResultSetオブジェクトを使用して、ロジックを実行できます。
Q#2)ResultSetが空かどうかを確認するにはどうすればよいですか?
回答: IsResultSet Emptyをチェックするために使用できるlength()、size()のような事前定義されたメソッドはありません。 next()メソッドを使用して反復でき、Trueが返された場合は空ではなく、Falseが返された場合はResultSetが空であることを意味します。
Q#3)ResultSetがnullになる可能性はありますか?
回答: いいえ、executeQuery()メソッドは、nullになることのないResultSetオブジェクトを返します。
Q#4)更新可能なResultSetとは何ですか?
回答: 更新可能なResultSetオブジェクトは、列のデータを更新し、列にデータを挿入し、行を削除するために使用されます。 ResultSetを更新可能なものにするには、スクロールタイプを機密または非機密に、CONCURタイプを更新可能にする必要があります。
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q#5)接続されているデータベース名を取得するにはどうすればよいですか?
回答: DatabaseMetaDataオブジェクトのgetDatabaseProductName()メソッドを使用できます。
結論
このチュートリアルでは、ResultSet、ResultSetMetaData、およびDatabaseMetaDataインターフェースとは何か、およびJDBCプログラムで一般的に使用されるそれらの重要なメソッドについて説明しました。 ResultSetを使用してDB内のデータを更新する方法も確認しました。 ResultSetMetadataには、列名、列数などのResultSetに関する情報が含まれています。
DatabaseMetaDataには、データベース情報が含まれています。
<| 次のチュートリアル>>