2017-06-29 6 views
2

H2データベースのNUMBER列にNULL値を挿入しようとしています。 私のJavaモデルでは、対応する値はLong(プリミティブではありません)です。さて、私は、JDBCドライバが指定されていない場合にnullを挿入する方法を知っていますが、私はそれを正確に行います。 私のDAO層はSpringにあり、この正確な列については、この方法でその値をマッピングしています。NUMBER列にNULLを挿入しています

if(user.getDefaultNumber() == null){ 
     map.addValue("defaultNumber", user.getDefaultNumber(), Types.NULL); 
}else{ 
     map.addValue("defaultNumber", user.getDefaultNumber()); 
} 

ただし、これは動作していないようです。私はそれをSpring Coreクラスに深く追い込んでおり、オブジェクトのnull値はそこにありますが、どこかでまだ0になっています。

誰かが私を数日間悩ませてくれますか?

+0

Types.Integerはすみません。 – eduyayo

+0

@eduyayoあなたのアドバイスでありがとう、これは私のために働いた。 – Tacker529

答えて

0

整数の列にNULL値を保存するためにPreparedStatementをしてみてください。なぜそれがTypes.NULLで動作しなかったのかまだ分かりませんが、私は調査します。今のところこれが解決策です。

if(user.getDefaultNumber() == null){ 
     map.addValue("defaultNumber", user.getDefaultNumber(), Types.INTEGER); 
}else{ 
     map.addValue("defaultNumber", user.getDefaultNumber()); 
} 

また、DBから読み取るときには正しくマップすることが非常に重要です。 JDBCはデータベースからNULLを読み込みますが、Javaの属性にはまだ0が挿入されます。したがって、読み込みが正しく処理されないと、書き込み部分が実際にOKであっても問題が解決されないという印象を残す可能性があります。

0

問題を解決するには、Types.Integerを追加しました

pst.setNull(4, java.sql.Types.INTEGER); 

enter link description here

+0

残念ながら、これは不可能で、アーキテクチャはかなり大きく、Springとのバリューマッピングを使用するように既に設定されています。したがって、PreparedStatementsを直接呼び出すことはできませんでしたが、上記のコメントからアドバイスが得られました。とにかくありがとう – Tacker529

関連する問題