TYPE_SCROLL_SENSITIVEとTYPE_SCROLL_INSENSITIVEの違い、CONCU_UPDATABLEの使用方法について
結果セットとは、クエリの結果をデータで返すオブジェクトのことです。結果セットは、クエリの結果を格納するオブジェクトですが、結果を格納するだけでなく、データを操作し、場合によっては更新することもあります。
結果セットからデータを読み込むための主なメソッドは getXXX() で、カラムとして整数値 (1 から始まる) あるいはカラム名を指定します。戻り値は、対応する XXX 型である。対応する列が空の場合、XXX は空の値の XXX 型を返すオブジェクトであり、XXX が Float などの数値型の場合は 0、boolean は false を返す。 getString() は列のすべての値を返すことができるが、戻り値は文字列型である。XXX は、整数型(int )、ブール型(Boolean)、浮動小数点型(Float、Double)などの基本データ型、ビット型(byte)、さらに以下のような特殊型も表現できます:日付型 (java.sql.Date)、時刻型 (java.sql.Time )、タイムスタンプ型 (java.sql.Timestamp )、大きな数値型 ( BigDecimal や BigInteger など) などなどです。また、getArray(int colindex/String columnname) を用いると、現在の行の colindex の位置する列の要素からなるオブジェクトの配列をこのメソッドで取得することができます。getAsciiStream() を使用する。
int colindex/String colname) で、その列に対応する現在の行の ascii ストリームを取得します。つまり、すべての getXXX メソッドは、現在の行に対して操作することになります。
結果セットは、その用途の特徴から4つのカテゴリーに分類される。この4つの分類の結果集合の特性は、Statement文の実行によって結果集合が生成されるので、すべてStatementの作成に関係していると言えますが、もちろん、Statement作成に含まれる次の4つの特性には、3つのタイプが含まれるという意味です。1つ目は、以下に紹介するStatementに対応する基本的なResultSetに相当するパラメータレス型です。以下のコードで使用しているConnectionは初期化されておらず、変数connはConnectionに対応するオブジェクトを表し、SqlStrは応答中のSQLステートメントを表しています。
1. 最も基本的なResultSetです。
なぜ最も基本的なResultSetかというと、このResultSetはクエリ結果を格納する機能を完成させる役割を果たし、前後にスクロールすることなく一度だけ読み込むことができるからです。このResultSetは、以下のような手順で作成されます。
Statement st = conn.CreateStatement()
ResultSet rs = Statement.excuteQuery(sqlStr);
この結果セットはスクロールをサポートしていないので、このような結果セットを取得する唯一の方法は、next() メソッドを使用してデータをひとつひとつ読み取ることです。
2. スクロール可能なResultSetタイプ。
このタイプは、レコードを取得するために前後にスクロールをサポートしていますnext()、previous()、バック最初の行にfirst()だけでなく、ResultSet絶対(int n)の最初の数行に移動し、現在の行に相対(int n)、次のメソッドでステートメントの作成にそのようなResultSetを実現するために。
Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)
このパラメータのうち、2つの意味を説明します。
resultSetType は、ResultSet オブジェクトのタイプをスクロール可能か、非スクロール可能かを設定するものである。値の取り方は以下の通り。
ResultSet.TYPE_FORWARD_ONLY は前方にのみスクロール可能です。
ResultSet.TYPE_SCROLL_INSENSITIVE と Result.TYPE_SCROLL_SENSITIVE はどちらも、ResultSet のポインタを移動させる様々な方法で、任意の前後方向のスクロールを実現することが可能です。両者の違いは、前者は変更に鈍感であるのに対し、後者は変更に敏感であることである。
TYPE_SCROLL_SENSITIVE は、すでに取り出された行の変更 (更新、削除) にのみ反応し、追加 (挿入) されたデータには反応しません。
resultSetConcurencyは、ResultSetオブジェクトを変更できるように設定するもので、次の値をとります。
ResultSet.CONCUR_READ_ONLY は読み取り専用の型パラメータに設定されています。
CONCUR_UPDATABLE Modifiable 型のパラメータに設定されています。
ですから、単にResultをロールアウト可能にしたいだけなら、以下のようにStatementを代入すればよいのです。
Statement st = conn.createStatement(RESULT.TYPE_SCROLL_INSENITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.excuteQuery(sqlStr).
このStatementで実行されるクエリ文は、スクロール可能なResultSetを生成します。
3. 更新可能な結果セット
このようなResultSetオブジェクトは、データベース内のテーブルの変更を完了することができますが、私はResultSetは、データベース内のテーブルのビューにのみ相当するので、随時、すべてのResultSetが限り、それが更新されるように設定されているとして更新することができます知って、ResultSetのSQLステートメントの更新を完了するには、次のプロパティを持っている必要があります。
a. 参照するテーブルが1つだけである。
b. join 節または group by 節が含まれていない。
c. それらの列は、メインキーワードを含む必要があります。
以上の条件で、更新可能なResultSetはデータの変更を完了することができ、更新可能なResultSetは
Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)
このようなStatementの実行結果は、更新可能な結果セットを取得します。更新は、ResultSetのカーソルを更新したい行に移動させ、getXXX()と同じ意味を持つXXXメソッドであるupdateXXX()を呼び出すことで行います。updateXXX()メソッドは2つのパラメータを持っており、1つは更新する列で列名や連番が使用可能です。2 番目は更新されるデータで、このデータ型は XXX と同じである必要があります。updateRow() メソッドは、行の更新が完了するたびに呼び出され、ResultSet のカーソルが変更された行から離れる前に呼び出されます。
挿入操作は updateXXX メソッドを使用しても可能です。しかし、その前に2つのメソッドを紹介する必要があります。
moveToInsertRow() は、ResultSet を挿入行に移動させます。この挿入行はテーブル内の特別な行で、特定の行を指定する必要はなく、このメソッドを呼び出すだけでシステムが自動的にその行に移動します。
moveToCurrentRow() ResultSetをメモリ上の特定の行(通常は現在の行)に移動させます。挿入操作が行われていない場合、このメソッドは何の効果もありません。挿入操作が行われた場合、このメソッドは挿入された行を残して挿入操作前の行に戻りますが、もちろん next() や previous() などで挿入された行を残すことも可能です。
データベースの挿入を完了するには、まず挿入行に移動するmoveToInsertRow()を呼び出し、その後、各列のデータの更新を完了するには、メソッドの更新XXXを呼び出し、更新を完了した後、データベースに書き込むために同じ操作を更新しますが、ここでinsertRow()の使用は、また、挿入列を残していないメソッドの実行前に、それ以外の挿入が実行されていないと挿入行の更新が失われます確保することです。
4. ホールド可能な結果セット
通常の状況下でStatementの使用は、クエリの実行後、次に別のクエリを実行するときに最初のクエリの結果セットが閉じられる、つまり、結果セットに対応するステートメントクエリのすべては、呼び出し接続コミット()メソッドも結果セットを閉じます場合です。ホールダビリティは、ResultSetの結果がコミットされるときに、それが閉じられるかどうかを意味します。JDBC 2.0と1.0は、どちらもResultSetがコミットされたときにクローズされることを規定しています。しかし、JDBC3.0では、ResultSetを閉じるかどうかを設定することができます。このようなResultSetのオブジェクトの作成を完了させるために、Statementの作成を利用して3つのパラメータを持つようにするには、このStatementの作成は、先ほど言ったように、3つ目の方法となります。次のようになります。
Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
ResultSet rs = st.excuteQuery(sqlStr);
最初の2つのパラメータは、2つの引数を持つcreateStatementメソッドと同じで、ここでは3つ目のパラメータのみを紹介します。
resultSetHoldabilityは、結果セットがコミットされた後にオープンされるかどうかを示し、2つの値を取ります。
ResultSet.HOLD_CURSORS_OVER_COMMIT: 変更のコミット時にデータベースが閉じられないことを示します。
ResultSet.CLOSE_CURSORS_AT_COMMIT: 変更がコミットされたときにResultSetが閉じることを示します。
ただし、この機能はJDBC 3.0ドライバでのみ有効です。
ResultSet インターフェースはデータテーブルへのアクセスを提供し、ResultSet オブジェクトは通常 "statements" を実行することで生成されます。
ResultSetは、常に現在のデータ行を指すカーソルを持ちます。初期状態では、カーソルは最初の行の前に位置しています。next() メソッドは、カーソルを次の行に移動させます。
getXXX メソッドは、現在の行の列の値を取得します。これらの値は、列のインデックス番号または列の名前を使用して取得することができます。通常は、列のインデックスを使用する方が効率的です。列の番号は 1 から始まります。
java.sqlパッケージ
公開インターフェース 結果セット
テーブル 102 DB2 Everyplace が ResultSet インターフェイスでサポートするフィールドを一覧表示します。
表102. ResultSet インターフェース フィールド
<テーブルフィールドタイプ
分野
静的 int
concur_read_only この定数は、更新できないResultSetオブジェクトに対する並列処理方法を示す。 注意点 ステートメントオブジェクトの作成時に ResultSet オブジェクトの並列方式に CONCUR_UPDATABLE を指定すると、 DB2 Everyplace JDBC ドライバはステートメントオブジェクトを生成した Connection オブジェクトに対して SQLWarning を発行し、代わりに CONCUR_READ_ONLY を使用するようにします。
静的 int
タイプ_forward_only この定数は、カーソルが前方にしか移動できない ResultSet オブジェクトの種類を示します。
静的 int
タイプ_scroll_insensitive この定数は、ResultSet オブジェクトがスクロール可能であるが、通常は他者による変更に鈍感であることを示す。 注意点 : このタイプのResultSetオブジェクトは、パフォーマンスに影響を与える可能性があるため、頻繁に使用しないでください。この型は CLI ステートメントプロパティ SQL_ATTR_CURSOR_SENSITIVITY の値として SQL_INSENSITIVE を使用します。詳細については、CLI 関数 SQLSetStmtAttr のドキュメントを参照してください。
静的 int
タイプ_scroll_sensitive この定数は、スクロール可能で、通常、他の人が行った変更に敏感な ResultSet オブジェクトの種類を示します。 注意点 この型は、CLI ステートメント属性 SQL_ATTR_CURSOR_SENSITIVITY の値として SQL_UNSPECIFIED を使用します。詳細については、CLI 関数 SQLSetStmtAttr のドキュメントを参照してください。
テーブル 103 DB2 Everyplace が ResultSet インターフェイスでサポートしているメソッドを一覧で表示します。
<テーブルメソッドの戻り値の型
メソッド
ブーリアン
絶対 (int row) JDBC 2.0. カーソルを結果セット内の指定された行番号に移動します。
ボイド
アフターラスト () JDBC 2.0. カーソルを結果セットの最終行の直後に移動させる。
ボイド
ビフォアファースト () JDBC 2.0. カーソルを結果セットの最初の行の直前に移動する。
ボイド
クリアワーニング () この ResultSet オブジェクトで報告された警告をすべて消去します。
ボイド
閉じる () この ResultSet オブジェクトのデータベースおよび JDBC リソースを、オブジェクトが自動的に閉じるまで待たずに、直ちに解放します。
int
findColumn (String columnName) 与えられたResultSetカラム名を、そのResultSetカラムインデックスにマップします。
ブーリアン
最初 () JDBC 2.0. カーソルを結果セットの最初の行に移動させる。
BigDecimal
getBigDecimal (int columnIndex) JDBC 2.0 では、現在の行のカラムの値を java.math.BigDecimal オブジェクトとして完全な精度で取得します。 Palm OS 用 DB2 Everyplace JDBC ドライバはこのメソッドをサポートしていません。
BigDecimal
getBigDecimal (int columnIndex, int scale) in java.math.BigDecim in Java programming language
<テーブルBigDecimal
getBigDecimal (int columnIndex, int scale) この ResultSet オブジェクトの現在の行の指定された列の値を、 Java プログラミング言語による java.math.BigDecimal オブジェクトとして取得します。 サポートされていません。
BigDecimal
getBigDecimal (文字列 columnName) JDBC 2.0. 現在の行のカラムの値を、完全な精度で java.math.BigDecimal オブジェクトとして取得します。 このメソッドは、Palm OS 用の DB2 Everyplace JDBC ドライバではサポートされていません。
BigDecimal
getBigDecimal (String columnName, int scale) この ResultSet オブジェクトの現在の行の指定された列の値を、 Java プログラミング言語による java.math.BigDecimal オブジェクトとして取得します。 サポートされていません。
ブロブ
getBlob (int columnIndex) JDBC 2.0. このResultSetオブジェクトの現在の行にあるBLOB値を取得します。
ブロブ
getBlob (String columnName) JDBC 2.0. この ResultSet オブジェクトの現在の行にある BLOB 値を取得します。
ブーリアン
ゲットブーリアン (int columnIndex) 現在の行の列の値をJavaのブール値として取得します。
ブーリアン
ゲットブーリアン (String columnName) 現在の行の列の値を Java Boolean として取得します。
バイト
getByte (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による バイト形式で取得する。
バイト
getByte (String columnName) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による バイト形式で取得する。
バイト[]で
ゲットバイト (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による バイト配列として取得する。
バイト[]で
ゲットバイト (String columnName) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語によるバイト配列として取得する。
int
getConcurrency () JDBC 2.0. 並列処理による結果セットの返送方法。
日付
取得日 (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、java.sql.ResultSet オブジェクトとして取得し ます。
日付
取得日 (int columnIndex, Calendar cal) この ResultSet オブジェクトの現在の行にある指定された列の値を java.sql.Calpha 形式で返します。
日付
取得日 (String columnName) この ResultSet オブジェクトの現在の行にある指定された列の値を、java.sql.Listenerator の形式で取得し ます。
ダブル
ゲットダブル (int columnIndex) 現在の行の列の値をJavaの倍精度として取得します。
ダブル
ゲットダブル (String columnName) 現在の行の列の値をJavaの倍精度で取得する。
フロート
getFloat (int columnIndex) 現在の行の列の値をJavaのfloatとして取得します。
フロート
getFloat (String columnName) 現在の行の列の値を Java float として取得します。
int
ゲットイント (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による整数値で取得します。
int
ゲットイント (String columnName) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による整数値で取得します。
長い
ゲットロング (int columnIndex) 現在の行の列の値を Java long integer として取得します。
長い
ゲットロング (String columnName) 現在の行の列の値を Java long integer として取得します。
結果セットメタデータ(ResultSetMetaData
メタデータを取得する () この ResultSet オブジェクトのカラムの数、タイプ、およびプロパティを取得します。
対象物
ゲットオブジェクト (int columnIndex) 現在の行の列の値をJavaオブジェクトとして取得します。
対象物
ゲットオブジェクト (String columnName) 現在の行の列の値をJavaオブジェクトとして取得します。
int
取得行 () JDBC 2.0。現在の行番号を取得します。
短い
ゲットショート
<テーブル短い
ゲットショート (String columnName) この ResultSet オブジェクトの現在の行にある指定された列の値を、Java プログラミング言語の short として取得する。
声明
取得ステートメント () JDBC 2.0. この ResultSet オブジェクトを生成した "ステートメント" を返します。
文字列
取得文字列 (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による String で取得する。
文字列
取得文字列 (String columnName) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語の String として取得する。
時間
取得時間 (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、Java プログラミング言語による java.sql.Time オブジェクトとして取得する。
時間
取得時間 (String columnName) この ResultSet オブジェクトの現在の行の指定された列の値を、java.sql.Listenerator の形式で取得します。
タイムスタンプ
取得タイムスタンプ (String columnName) この ResultSet オブジェクトの現在の行の指定された列の値を、java.sql.Listenerator の形式で取得します。
タイムスタンプ
取得タイムスタンプ (int columnIndex) この ResultSet オブジェクトの現在の行の指定された列の値を、java.sql.Listenerator の形式で取得します。
int
getType () JDBC 2.0。この結果セットの型を返します。
SQLWarning
警告の取得 () は、この ResultSet の呼び出しによって報告された最初の警告を返します。
ブーリアン
isAfterLast () JDBC 2.0. カーソルが結果セットの最終行の後にあるかどうかを示します。
ブーリアン
isBeforeFirst () JDBC 2.0. カーソルが結果セットの最初の行より前にあるかどうかを示します。
ブーリアン
isFirst () JDBC 2.0. カーソルが結果セットの最初の行にあるかどうかを示します。
ブーリアン
最後の () JDBC 2.0. カーソルが結果セットの最終行にあるかどうかを示します。このメソッドは、TYPE_FORWARD_ONLY タイプの結果セットではサポートされていません。
ブーリアン
最後 () JDBC 2.0. カーソルを結果セットの最終行に移動させる。
ブーリアン
次 () カーソルを現在の位置から1行下に移動させます。
ブーリアン
前 () JDBC 2.0. カーソルを結果セットの前の行に移動させる。
ブーリアン
相対的 (int rows) JDBC 2.0. カーソルを行数に対して相対的に移動させる(正または負)。
ブーリアン
wasNull () 最後に読み込んだ列がSQL NULLの値を持っているかどうかを報告します。
ResultSetレコードセット用のJDBC API 2.0/3.0
JDBC API 2.0/3.0のResultSetレコードセットに関する簡単で便利な新機能をご紹介します。
1 いくつかの新しい定数が定義されました
これらの定数は、ResultSetのタイプカーソルの移動方向などのプロパティを指定するために、以下のように使用されます。
public static final int FETCH_FORWARD; この定数の目的は、レコードセットの行を処理する順序を前から後ろへ、つまり、最初の行から最後の行まで指定することです。
public static final int FETCH_REVERSE; この定数の機能は、レコードセットの行を後ろから前に、つまり最後の行から最初の行に処理する順序を指定することです。
public static final int FETCH_UNKNOWN; この定数の機能は、JDBCドライバとデータベースシステムによって決定される、レコードセット内の行の処理順序を指定しないことである。
public static final int TYPE_FORWARD_ONLY; この定数の機能は、データベースカーソルが前方に移動し、後方に移動することができないことを指定することです。
public static final int TYPE_SCROLL_INSENSITIVE; この定数の機能は、データベースカーソルがレコードセット内で前後に移動でき、現在のデータベースユーザーが取得したレコードセットが他のユーザーの操作に影響されないことを指定することです。現在のユーザーはレコードセット内のデータを閲覧しているが、現在のユーザーによって取得されたレコードセット内のデータは何ら影響を受けない。
public static final int TYPE_SCROLL_SENSITIVE; この定数の目的は、データベースカーソルがレコードセット内で前後に移動でき、現在のデータベースユーザーが取得したレコードセットが他のユーザーの操作に敏感であること、つまり現在のユーザーがレコードセットを閲覧していても、他のユーザーの操作によってデータベース内のデータが変更されても現在のユーザーが取得したレコードセットには影響が及ばないことを指定することです。もし、現在のユーザーがレコードセットを閲覧していても、他のユーザーの操作によってデータベース内のデータが変更された場合、現在のユーザーが取得したレコードセットのデータも並行して変更され、非常に深刻なエラーにつながる可能性があります。
public static final int CONCUR_READ_ONLY; この定数の目的は、現在のレコードセットの読み取り専用の連携モードを指定することです。この定数が使われると、ユーザーはレコードセット内のデータを更新することができなくなります。
public static final int CONCUR_UPDATABLE; この定数の目的は、現在のレコードセットの concurrencymode (更新可能) を指定することです。この定数が使用されると、ユーザーは updateXXX() などのメソッドを使用してレコードを更新できます。
2 ResultSet インターフェースは、ロカリティメソッド一式を提供する
これらは、レコードセット内の任意の行を次の場所で見つけることができます。
public boolean absolute(int row); このメソッドの機能は、レコードセット内の行を現在の行に設定すること、つまり、データベースカーソルを指定された行に移動させることである。引数rowは、ターゲット行の行番号を指定します。これは、相対行番号ではなく、レコードセットの最初の行から計算された絶対行番号です。
public boolean relative(int rows); このメソッドもレコードセット内の行を現在の行に設定しますが、パラメータ rows は現在の行に対するターゲット行の相対行番号を表します。
public boolean first(); このメソッドの機能は、現在の行をデータベースのレコードセットの最初の行に位置づけることです。
public boolean last(); このメソッドは、first() メソッドと全く逆の動作をします。
public boolean isFirst();
public boolean isFirst(); このメソッドの目的は、現在の行がレコードセットの最初の行であるかどうかをチェックし、そうであればtrueを返し、そうでなければfalseを返すことです。
public boolean isLast(); このメソッドは、現在の行がレコードセットの最後の行であるかどうかをチェックし、そうであれば真を返し、そうでなければ偽を返します。
public void afterLast(); このメソッドは、レコードセットの最後の行の後に、データベースカーソルをレコードセットの最後に移動します。
public void beforeFirst(); このメソッドは、データベースカーソルをレコードセットの先頭、レコードセットの最初の行の前に移動させますが、レコードセットが行を含んでいない場合、このメソッドは動作しません。
public boolean isAfterLast(); このメソッドは、データベースカーソルがレコードセットの最後にあるかどうかをチェックし、ある場合は真を、そうでない場合は偽を返します。
public boolean isBeforeFirst(); このメソッドは、データベースカーソルがレコードセットの先頭にあるかどうかをチェックし、ある場合は真を、そうでない場合は偽を返します。
public boolean next(); このメソッドの役割は、次の行が現在の行になるように、データベースカーソルを1つ前に移動することです。ちょうどレコードセットオブジェクトを開いたときに、レコードセットの先頭にあるデータベースカーソルの位置は、次の()メソッドの最初の使用は、レコードセットの最初の行に位置するデータベースカーソルを作るでしょう。next()メソッドの2番目の使用は、次のようになります。 next()メソッドの最初の使用は、レコードセットの最初の行にデータベースカーソルを配置し、next()メソッドの2番目の使用は、レコードセットの2行目にデータベースカーソルを配置し、そのようになります。
public boolean previous(); このメソッドは、データベースカーソルを1つ後ろの位置に移動し、前の行を現在の行にします。
3 ResultSetインターフェースは、行操作のサポートを追加します(最もエキサイティングな点)。
ResultSetインターフェースのメソッドは、スクロール可能なレコードセットをサポートするように変更され、データベースカーソルは、返されたレコードセットオブジェクトを自由に前方または後方にスクロールしたり、特定の行を見つけることができます。ResultSetインターフェイスに定義された新しいメソッドにより、JSP/ServletプログラマはSQL文の実行に頼らず、Java言語を使ってレコードの挿入や行のデータの更新など、レコードセットの更新が可能になり、プログラマの開発作業が大幅に容易になり、Javaプログラミングの楽しさを味わうことができます。
ResultSetインタフェースに新たに追加されたメソッドの一部を以下に示します。
public boolean rowDeleted(); 現在のセット内の行が削除されると、セット内に空のスペースが残ります。rowDeleted() メソッドを呼び、空のスペースを検出した場合は true、空のスペースを検出しなかった場合は false を返します。
public boolean rowInserted(); このメソッドは、現在のレコードセットに新しい行が挿入された場合に真を、そうでない場合に偽を返します。
public boolean rowUpdated(); このメソッドは、現在のレコードセットの現在の行のデータが更新された場合は真を、それ以外の場合は偽を返します。
public void insertRow(); このメソッドは、現在のレコードセットに新しい行を挿入する操作を実行します。
public void updateRow(); このメソッドは、現在のレコードセットの現在の行のデータを更新します。
public void deleteRow(); このメソッドは、現在のレコードセットの現在の行を削除します。
public void updateString(int columnIndex String x); このメソッドは、現在のレコードセットの現在の行の列の値を更新します。列のデータ型はString(Javaデータ型がStringで、対応するJDBCデータ型がVARCHARまたはNVARCHARなどのデータ型という意味です。 データ型)であります。) メソッドのcolumnIndexは、更新する列の列インデックスを指定し、最初の列の列インデックスは1など、2番目のパラメータxは、新しい値を表す、このメソッドは、データベース操作を実行しません、あなたはレコードセットとデータベース内のデータが実際に更新することができます前にinsertRow()メソッドを実行する必要がありますまたは更新Row()メソッドを実行します。
public void updateString(String columnName String x); このメソッドは前述の同名のメソッドと似ていますが、このメソッドの最初のパラメーターは columnIndex ではなく、更新する列の列名を表す columnName になっています。
データベース内の現在のレコードセットに新しい行を挿入する手順は次のとおりです。
1 moveToInsertRow() メソッドを呼び出します。
2 updateXXX()メソッドを呼び出し、挿入された行の各列の値を指定します。
3 insertRow() メソッドを呼び出して、データベースに新しい行を挿入します。
データベース内のレコードの値(行の値)を更新するためのメソッドは
1 修正する行の位置を特定する(absolute() relative() などのメソッドを使用して位置を特定する)。
2 対応する updateXXX() メソッドを使用して、行の列の新しい値を設定します。XXX で表される Java データ型は、列の JDBC データ型にマッピング可能でなければならず、操作をロールバックしたい場合は、特定の行の特定の列の値を復元できる updateRow() メソッドを呼び出す前に cancelRowUpdates() メソッドを使用します。
3 updateRow() メソッドを使用して、UPDATE 操作を完了します。
レコードセット内の行を削除する(つまり、レコードを削除する)には。
1 修正する行を探します(absolute() relative()などのメソッドを使用します)。
2 deleteRow()を使用する
レコードセット内の行を削除する(つまり、レコードを削除する)ため。
1 修正する行を探します(absolute() relative() などのメソッドを使用)。
2 deleteRow()メソッドを使用します。
JDBC API 3.0 では、ResultSet インターフェースに updateArray() updateBlob() updateClob() updateRef() などのメソッドも追加されました。
1
Javaデータベース操作の基本フロー
2. よくある重要なヒント
スクロール可能、更新可能なレコードセット
一括更新
トランザクション処理
javaの基本的なデータベース操作プロセス:データベース接続の取得 - SQL文の実行 - 実行結果の処理 - データベース接続の解除
1. データベース接続を取得する
1) DriverManagerでデータベース接続を取得する
例
String className,url,uid,pwd;
className = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;
uid = "system";
pwd = "
manager
";
Class.forName(className);
Connection cn = DriverManager.getConnection(url,uid,pwd);
2) jndi(ジャワのネーミング・アンド・ディレクトリ・サービス)方式で
例
String jndi = "jdbc/db";
Context ctx = (Context)
new
InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup(jndi);
Connection cn = ds.getConnection();
主にjspで使用される
2. sql文の実行
1)ステートメントを使ったSQL文の実行
String sql;
Statement
sm
= cn.createStatement();
sm.executeQuery(sql); // Execute the data query statement (select)
sm.executeUpdate(sql); // Execute the data update statement (delete, update, insert, drop, etc.) statement.close();
2) PreparedStatementによるSQL文の実行
String sql;
sql = "insert into user (
id
,name) values (? ,?) ";
PreparedStatement ps = cn.prepareStatement(sql);
ps.setInt(1,xxx);
ps.setString(2,xxx);
...
ResultSet rs = ps.executeQuery(); // Query
int c = ps.executeUpdate(); // update
3. 実行結果の処理
レコードセットのResultSetを返すクエリ文。
この更新によって影響を受けるレコードの数を示す数値を返す更新文です。
ResultSetに関するメソッドです。
1. next()でカーソルを1行戻し、成功したらtrueを、失敗したらfalseを返す。
2. getInt("id") または getSting("name") で、現在のカーソル下にあるフィールドの値を返します。
3. 接続を解除する。
cn.close();
一般に、最初にResultSetを閉じ、次にStatement (またはPreparedStatement)を閉じます。
接続
スクロール可能、更新可能なレコードセット
1. スクロール可能、更新可能なStatementを作成する
Statement sm = cn.createStatement(ResultSet.
TYPE
_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);
このステートメントで得られる結果セットは、スクロール可能な
2. PreparedStatementの作成時にパラメータを指定する
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet.absolute(9000);
一括更新
1、ステートメント
Statement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
...
sm.executeBatch()
複数のsql文を後から実行し、一括更新できるStatementオブジェクトです。これらの複数のステートメントは、delete、update、insertなど、またはその両方が可能です。
2. PreparedStatement
PreparedStatement ps = cn.preparedStatement(sql);
{
ps.setXXX(1,xxx);
...
ps.addBatch();
}
ps.executeBatch();
SQLステートメントを受け取り、複数回実行するためにパラメータを変換し、1回だけ更新するPreparedStatementです。
トランザクションの処理
1. 接続の自動コミット機能をオフにする
cn.setAutoCommit(false);
2. 一連のSQLステートメントを実行する
ポイント:新しいSQL文を実行する前に、最後のSQL文が実行されたStatement(またはPreparedStatemet)を最初に閉じなければなりません。
Statement sm ;
sm = cn.createStatement(insert into user...) ;
sm.executeUpdate();
sm.close();
sm = cn.createStatement("insert into corp...) ;
sm.executeUpdate();
sm.close();
3. 提出
cn.commit();
4. 例外が発生した場合はロールバック
cn.rollback();
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例