2011-10-23 5 views
0

データベースをさまざまな小さな文字列でロードするためにprepared statementsを使用しています。javaは自動的にトリミングされているようです。私は ""(単一のスペース)の値をロードしようとすると、データベース内の空の文字列として終わります。複数のスペースが同じ結果を持つので、トリミングされているようです。私のパラメータの一つをロードするためにデータベースに送信された文字列パラメータが空白文字を削除しないようにする方法を教えてください。

cmd.setString(3, " "); 

:私はテキスト上の任意の.trim()を呼び出すことはありません

、私は単にこれを持っています。さもなければ、すべて正常に動作します、それは問題があるように見える空白だけです。私はシーケンス内で多くのクエリを作成しているので、準備された文を使用する必要があります。そうしないと効率が悪いのでSQL文を手動でロードできません。

これをオフにするオプションがありますか?あるいは、ある種の回避策ですか?

答えて

0

java.sqlの仕様では、ドライバがtrim()操作を実行する必要があることが確認されていません。しかし、ちょうどその場合、次のことを試すことができますか?

cmd.setNString(3, " "); 
+0

setNStringあるかどうかを確認しなければならなかった、残念ながら、結果は空文字列 – user173342

+0

にIコネクタ/ JののPreparedStatementのソースコードをチェックしていますtrim()関数の呼び出しはありません。だから、私たちが見ていない別のエラーがあるかもしれません。 –

+0

これは、CHAR(1)フィールドにロードされており、.netコネクタで正常に動作しました。見るべきことは本当にありません。だから、どこに問題が起きているのか分かりません... – user173342

0

これを試すことができますか。

String s= new String(" "); 
cmd.setBytes(3,s.getBytes(s)); 

そのヘルプが有効かどうかを確認してください。

0

mysqlでストアドプロシージャを呼び出すときに同様の問題が発生しました。しかし、これをmysqlから実行すると、次のようになります。

select ' ' = ''; 

trueを返します。

私のストアドプロシージャは空の文字列として報告されましたが、ストアドプロシージャは空白文字列を取得しました。固定するために

、私はLIKEを使用して空の文字列を確認するか、炭化長も0

関連する問題