Trouble 9: DBに接続できません
<Q9-1>同じConnectionから、Statementを使用したSQL文の発行はネストして行えません。
例えば、SQLの結果をResultSetで取り出す際、通常はwhileループを使用して取り出すが、その中で新たに同じConnectionを使用して別のSQL文を発行しようとするとSQLExceptionが発生してしまいます。
| <発生環境> |
| OS |
Solaris |
| JDK |
JDK1.3 |
| Vender |
Sun |
- <A9-1>
- このような場合は、一度ResultSetから結果を全て取り出してList等に保存しておき、そこから新たにループを作るなどしてResultSetループのネストを解消してください。
また、どうしてもネストを解消できない場合は別のConnectionを使用する方法も考えられます(この方法は未確認です)。
<Q9-2>「SELECT * FROM テーブル名」を利用して取得したResultSetを更新する事ができません。
| <発生環境> |
| OS |
WindowsNT 4.0 |
| JDK |
JDK1.3.1_02 |
| Vender |
Sun |
| DB |
Oracle8 Enterprise Edition Release 8.0.5.2.1 |
| JDBC Driver |
Oracle JDBC Driver 8.1.6.0.1 |
- <A9-2>
- Oracle JDBC Driver V8.1.6 / V8.1.7の制限事項により、「SELECT * FROM テーブル名」で取得したResultSetは更新可能ResultSetではありません。更新可能ResultSetを取得するには、「SELECT
テーブル名.* FROM テーブル名」というように表の別名を利用してください。
また、このドライバには、上記問題を含めて以下のような制限事項があります。
(1) 問合せによって選択できるのは、単一の表のみです。
(2) 問合せでは「SELECT *」を使用できません。
(3) 問合せで選択できるのは、表列のみです。
(4) 問合せでは「ORDER BY」を使用できません。
詳しくはOracleの「JDBC 開発者ガイドおよびリファレンス」を参照してください。
<Q9-3>ResultSetMetaData.getTableName()でテーブル名を取得することができません。
| <発生環境> |
| OS |
WindowsNT 4.0 |
| JDK |
JDK1.3.1_02 |
| Vender |
Sun |
| DB |
Oracle8 Enterprise Edition Release 8.0.5.2.1 |
| JDBC Driver |
Oracle JDBC Driver 8.1.6.0.1 |
- <A9-3>
- Oracleの「JDBC 開発者ガイドおよびリファレンス」によると、ResultSetMetaDataインターフェースのgetSchemaName()メソッドとgetTableName()メソッドは実装されていません。
この環境で実際に実行すると、空文字列が返却されます。
注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
エスエムジー株式会社は一切関知いたしません。