「NULL を確実に設定できるようにするには」の版間の差分
提供: tknotebook
(1人の利用者による、間の3版が非表示) | |||
1行: | 1行: | ||
[[Category:コンピュータ]][[Category:Java]][[Category:MyBatis]] | [[Category:コンピュータ]][[Category:Java]][[Category:MyBatis]] | ||
− | [[メインページ]]>[[コンピュータの部屋#Java]]>[[ | + | [[メインページ]]>[[コンピュータの部屋#Java]]>[[MyBatis Tips]] |
22行: | 22行: | ||
パラメータの JDBC型を指定すればよいのですが、MyBatis には型がわからないので、 | パラメータの JDBC型を指定すればよいのですが、MyBatis には型がわからないので、 | ||
− | + | MyBatisは'''「jdbcTypeForNull」'''という設定値を使います。既定値は '''java.sql.Type.OTHER''' です。 | |
− | 多くの データベースでは java.sql.Type.OTHER(MyBatisの既定値) | + | 多くの データベースでは java.sql.Type.OTHER(MyBatisの既定値)で大丈夫なのですが、 |
− | Oracle | + | Oracle 等は駄目なようです。 |
これは MyBtis の設定に | これは MyBtis の設定に | ||
38行: | 38行: | ||
#{email, jdbcType=VARCHAR} | #{email, jdbcType=VARCHAR} | ||
と JDBC型を明示するとうまく行きます。 | と JDBC型を明示するとうまく行きます。 | ||
− | |||
− | |||
− | |||
− |
2016年11月19日 (土) 04:46時点における最新版
メインページ>コンピュータの部屋#Java>MyBatis Tips
MyBatis で SQL に パラメータを渡す場合、SQLに OGNL式 を埋め込みますが、値が NULL だと 実行時エラーになってしまうことがあります。
例
<insert ・・・・ INSERT INFO STUDENT(NAME, EMAIL) VALUES(#{name}, #{email}) </insert>
式 email が NULL だと例外が発生する。
これは JDBC の仕様に起因しています。
JDBC では SQLパラメータに NULL をセットする時は
PreparedStattement#setNull(int parameterIndex, int sqlType)
を使いますが、値の設定にはなぜか、型の sqlType(JDBC型)が必要です。
パラメータの JDBC型を指定すればよいのですが、MyBatis には型がわからないので、 MyBatisは「jdbcTypeForNull」という設定値を使います。既定値は java.sql.Type.OTHER です。
多くの データベースでは java.sql.Type.OTHER(MyBatisの既定値)で大丈夫なのですが、 Oracle 等は駄目なようです。
これは MyBtis の設定に
<setting name="jdbcTypeForNull" value="NULL" />
を加えることで対処できます。
しかし、MS SQLServer などはこれでも駄目です。
そのような場合は OGNL でパラメータを指定する時
#{email, jdbcType=VARCHAR}
と JDBC型を明示するとうまく行きます。