私は ORACLE9i と Oracle8 を長年使用してきましたが、JSP を使用する際に注意が必要な問題を参考までに書き留めておきます。
1. 大きな型の Clob および BLOB の扱い方
CLOB は大きなテキスト データを格納するために使用でき、アプリケーション開発では比較的一般的です。 Clob のデータを読み取るための 2 つのメソッドが用意されています。
getCharacterStream() メソッドは、Unicode でエンコードされた入力ストリーム (java.io.Reader オブジェクト) を返します。
getAsciiStream() メソッドは、ASCII でエンコードされた入力ストリーム (java.io.Reader) を返します。 io.InputStream オブジェクト) が
ある場合は、前述の方法を使用する必要があります。
次に、実際的な例を示し、CLOB フィールドを含むテーブルを
段階的に作成します。
create table test (id INTEGER, content clob);
次に、このテーブルに JSP 経由でレコードを挿入し、取得して表示します。
挿入操作
の注意点は次のとおりです。
1) Clob 型データは直接挿入できません。最初に empty_clob() メソッドを通じて指定する必要があります (同様に、 empty_blob() 関数を使用して BLOB にロケーターを割り当てます)。ただし、結果セットは空ではありません)、Clob オブジェクトを取得し、オブジェクトの内容を変更して、ニーズを満たすようにします。その後、更新メソッドを通じて行レコードが更新されます。
2) select を通じて LOB タイプを含むレコードを変更する場合。行はロックされている必要があります (for update キーワードを使用して実装されています)。ロックされていない場合、Oracle はエラーを報告します。
3) 挿入されたレコードが更新対象として選択された場合、「読み取り順序違反」エラーが発生します。 submit 関数を false (自動送信は許可されない) に設定してコミットし、それを選択します。これが上記のコードの //* 行の関数です。
次に、新しく挿入されたレコードを から読み取ります。
2. エンコーディング
の
問題JAVA の開発者は外国人であるため、中国語のサポートはあまり良くありません。これは私たちの多くにとって頭痛の種です。これが私たちが中国語の文字について話していることです。中国語の文字エンコーディングの仕様については詳しく説明しませんが、主に Oracle データベースに接続する方法について説明します。ただし、これらの小さな問題は非常に厄介です。
1. データベースに挿入された中国語の質問はエンコーディングに変換される必要があります
。 2. データベースから読み取られた中国語はエンコーディングに変換される必要があります。
エンコードされた JAVA コードを見てみましょう。
//ECov.java java.io.UnsupportedEncodingExceptionをインポートします。 パブリッククラス ECov { public static String asc2gb(String asc){ 文字列レット。 if(asc==null)asc を返す; 試す{ ret=new String(asc.getBytes("ISO8859_1"),"GB2312"); } catch(UnsupportedEncodingException e){ ret=asc; } retを返します。 } パブリック静的文字列 gb2asc(String gb){ 文字列レット。 if(gb==null)gb を返します; 試す{ ret=new String(gb.getBytes("GB2312"),"ISO8859_1"); } catch(UnsupportedEncodingException e){ ret=GB; } retを返します。 } public static int byte2int(byte b){ return ((-1)>>>>24)&b; } } |
実際、このコードの意味は 2 つのメソッドを 1 つに結合することです。
データベースへの挿入時には ECov.gb2asc(arg) を使用し、読み取り時には ECov.asc2gb(arg) を使用する必要があります。最も重要な点は、Oracle が ISO8859_1 形式のエンコーディングしか認識しないように見えることです (単なる私の考えです)。
3. 細かい詳細
1. setAutoCommit(true または false) です。これは、sqlPlus で一般的に使用される commit() 関数です。true を使用する場合は commit() を使用しないでください。それ以外の場合は、引き続き commit() メソッドを使用します。 。
2. 日付型の処理は、実際には setDate() や getDate() ほど単純ではありません。途中に大きな抜け穴があります。自分でデバッグしてみるととても楽しいでしょう。
3. データベースでは接続プール テクノロジを使用するのが最適です。これは、標準の J2EE 環境と単純な JNDI テクノロジを使用するのに適した方法です。