Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Derby, iBATIS и null
Постоянная ссылка 06-06-2009 anydoby java

Сегодня наткнулся на забавную ошибку при работе с Derby через iBATIS:


 java.sql.SQLDataException: An attempt was made to get a data value of type '<UNKNOWN>' from a data value of type  CHAR

А произошло это, когда я попытался сделать в iBATIS update и строковое поле было null. Проблема, оказалось, банальная - я использовал parameterClass, и iBATIS, естественно, не знал, как получше сказать Derby, какого типа null :)

Решение простое: нужно использовать для апдейта parameterMap и в мапе явно указать jdbcType для всех атрибутов, которые могут быть нулями. Вот так, например:


 <parameterMap class="user" id="userMap">
    <parameter property="username" jdbcType="VARCHAR"/>
    <parameter property="password" jdbcType="CHAR"/>
    <parameter property="email" jdbcType="VARCHAR"/>
    <parameter property="activationCode" jdbcType="CHAR"/>
    <parameter property="lastLogin" jdbcType="TIMESTAMP"/>
    <parameter property="id" jdbcType="INTEGER"/>
 </parameterMap>

 <update id="update" parameterMap="userMap">
    <![CDATA[
    update "user" set username = ?, password = ?, email = ?,
    activationCode = ?, lastLogin = ?, lastModified = CURRENT_TIMESTAMP    
    where id = ?
    ]]>
 </update>

Добавить комментарий

Предыдущая статья Как запретить автоматическое редактирование в JTable Следующая статья Мертвый autocompletion в Eclipse