MS Access から DerbyDB に変換しようとしています。ただし、一部の varchar フィールドには、改行、タブ、パーセント記号、外来文字などの「特殊な」文字が含まれています。
クイックメソッドを作成しました...
public String charCheck(String s)
{
errLog.add(1, "converting string from " + s);
s.replaceAll("'", "''");//an apostrophe is escaped with an apostrophy in Derby...
s.replaceAll("%", "\\%");//a percent sign
s.replaceAll("\\s+n", " ");//whitespace characters (newlines and tabs etc)
s.replaceAll("/", "\\/");//the 'divide' \ character,
s.replaceAll("<", "\\<");//mathematical symbol less than
s.replaceAll(">", "\\>");//mathematical symbol greater than
errLog.add(1, "to " + s);
return s;
}//end method
varchar (または long varchar) データ型が必要だと判断したときに実行します。奇妙なことに、エラー ログにはメッセージが出力されますが、出力では空白文字が変更されていないように見え (つまり、タブと改行が単純なスペースに変換されません)、文字列内のアポストロフィが置き換えられません。
このメソッドの出力のサンプルは、次のようになります。
converting string from 2. FIN DE L’ESSAI
to 2. FIN DE L’ESSAI
したがって、文字列は明らかに変更されず、挿入ステートメントを実行するとderbyDBが混乱します。また、複数のレコードをテーブルに挿入するためのエスケープシーケンスに関する明らかなドキュメントが見つかりません。ステートメントを使用して、後にエスケープキーワードを追加したいと思いますそれ、すなわち
stmt.execute("{call "+ sqlInsertStatement +"}{escape '" + escapeCharacter +"'" );
上記のステートメントではエスケープキーワードが役に立たない可能性があることもドキュメントから読みました。
発生した挿入エラーをソートする場所を知る必要があります。
insert ステートメントをコピーして ij に直接貼り付けた場合、レコードが正常に挿入する特殊文字を削除すると、最初のインスタンスで変換されない理由がわかりません。
また、二重引用符で varchar および longvarchar フィールドを囲んでみましたが、ダービーは二重引用符が見つかったというエラーを出します!
近くにいるような気がするので整理したいのですが…
前もって感謝します