2

null 値を許可する float 型の列に NULL 値を挿入するのに問題があります。私はこの例外を受けています:

SQLServerException: Operand type clash: varbinary is incompatible with float
    at (...)

PreparedStatementデータベースのクエリに使用しています。この特定の値を設定するために使用するコードは次のとおりです。

Float floatValue;

(...)

if((this.floatValue != null)&&(this.floatValue != 0)) ps.setFloat(col_pos,this.floatValue);
else ps.setNull(col_pos,java.sql.Types.NULL);

(...) int result = ps.executeUpdate(); //Here is when i get the error, when it tries to insert/update the table).

私は何を間違っていますか?このコードは (コードの他の部分で)nvarcharまたはint列に対して機能します。このエラーが発生するのは初めてです。

前もって感謝します。

4

2 に答える 2

4

varbinary暗黙的にnvarcharandにキャストしますが、 にはキャストしintませんfloat

ここのグラフを参照してください: http://msdn.microsoft.com/en-gb/library/ms187928.aspx

および列に真のデータベース null を保存していないと思われますnvarcharint

于 2013-04-08T09:20:39.460 に答える
3

gbnの回答のおかげps.setNull(col_name, java.sql.Types.NULL)で、自分のコードでを使用すると実際に何が起こっているのかがわかりました。私は間違っていました。NULL 値を挿入する列のタイプを指定する必要がありました。したがって、解決策は次のとおりです。

ps.setNull(col_name, java.sql.Types.FLOAT);

列に null 値を設定する必要があったときは、最初に を使用ps.setInt(col_name,null)しましたが、セッター メソッドはオブジェクトではなく標準の基本型 (int、float、...) を使用するため、例外が返されます。解決策を探したところ、(誤って) を使用する必要があることがわかりましたps.setNull(col_name, java.sql.Types.NULL)。の

なぜjava.sql.Types.NULLですか?知りませんでした。列に null を追加する方法だと思いました。

それからgbnは言った:

varbinary は暗黙的に nvarchar および int にキャストしますが、float にはキャストしません (...) nvarchar および int 列に真のデータベース null を格納していないと思われます

そのため、内部的に接続がvarbinary NULLを作成していて、それを Float 型に変換しようとすると例外が発生し、gbn によって参照されるグラフに従ってサポートされていない可能性があると考えました。java.sql.Types.FLOAT次に、タイプを指定しようとしましたが、うまくいきました。

この説明が、同様の問題を抱えている他のユーザーに役立つことを願っています。ヒントを提供してくれたgbnに感謝します。

于 2013-04-09T10:39:59.623 に答える