0

次の状況: 古い AS400 DB は UTF8 を処理できないため、すべての選択/挿入/更新を操作する必要があります。私の最初の考えは次のとおりです。簡単に聞こえますが、機能しません (コンストラクターの可視性のためにクラスを拡張することさえできません)。

resultset.getString(i) および preparestatement.setString(1, string) メソッドを操作する簡単な方法を作成し、それらを私のメソッドを介して実行する方法を知っている人はいますか?

前もって感謝します!

@edit: 実際の問題は、č のような文字の情報が失われていることです。当社の DB は ISO-8859-1 のみを処理できます。

4

3 に答える 3

1

サーバーとの間で送受信する文字セットを構成するために、可能な JDBC ドライバーのプロパティを調査してみてください。

JDBC プロパティは、コード内から設定するか、Java EE コンテナー (Websphere など) 内で実行している場合はデータソース構成に追加できます。

AS400 の経験はありませんが、このドライバー プロパティのリストが役立つ場合があります。特に言及している

package ccsid= SQL パッケージおよびサーバーに送信されるすべてのステートメントに使用する文字エンコードを指定します。

選択肢は次のとおりです: "1200" (UCS-2)、"13488" (UTF-16)

プログラムで対処しなければならない文字変換の問題は何ですか?も参照してください。

于 2012-08-29T08:00:43.960 に答える
0

あなたの「AS400」が実際にどれくらい古いかはわかりませんが、IBM i プラットフォームはかなり長い間 UTF8 をサポートしてきました。IBM 側の人にテスト テーブルを作成してもらいます。彼らが DDS を使用していると仮定すると (彼らはそれが何を意味するかを知っているでしょう)、ここに UTF8 と UTF16 があります:

 A            CHARUTF8      10A         COLHDG('UTF8') 
 A                                      CCSID(1208)    
 A                                      ALWNULL        
 A            CHARUTF16     10G         COLHDG('UTF16')
 A                                      CCSID(1200)    
 A                                      ALWNULL        

SQL DDL を使用してテーブルを定義している場合は、UTF-8 の場合は VARGRAPHIC CCSID 1208 を、UTF-16 の場合は VARGRAPHIC CCSID 1200 を試してもらいます。

于 2012-08-29T14:27:46.877 に答える
0

接続接続 = null; PreparedStatement 準備済みステートメント = null; ResultSet generatedKeys = null;

try {
connection = m_Connection;
preparedStatement = (PreparedStatement) connection.prepareStatement(qString, Statement.RETURN_GENERATED_KEYS);

// ...

int affectedRows = preparedStatement.executeUpdate();
if (affectedRows == 0) {
    throw new SQLException("Creating user failed, no rows affected.");
}

generatedKeys = preparedStatement.getGeneratedKeys();
int id = -1;
if (generatedKeys.next()) {
    id = generatedKeys.getInt(1);
    id = -1;
} else {
    throw new SQLException("Creating user failed, no generated key obtained.");
}
} finally {

}
于 2012-08-29T06:30:58.307 に答える