在数据库中插入记录时出错

时间:2012-09-13 07:06:20

标签: java spring sybase

生产中的某个时候我们遇到了这个问题,我试图找出原因,但还没有好运。

com.sybase.jdbc3.jdbc.SybSQLException: The parameter of type 61 did not have a valid value.

当我们手动运行查询时它工作正常,这给出了以下错误。所以我觉得查询没问题。

        SQL state [ZZZZZ]; error code [3814]; The parameter of type 61 did not have a valid value.
    ; nested exception is com.sybase.jdbc3.jdbc.SybSQLException: The parameter of type 61 did not have a valid value.
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:811)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:833)
    at org.springframework.jdbc.object.SqlUpdate.updateByNamedParam(SqlUpdate.java:248)
    at com.cachestore.sql.PTMSSqlUpdate.updateByNamedParam(PTMSSqlUpdate.java:35)
    at com.cachestore.PTMSCacheStore.store(PTMSCacheStore.java:277)
    ... 6 more
    Caused by: com.sybase.jdbc3.jdbc.SybSQLException: The parameter of type 61 did not have a valid value.
    at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
    at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.updateLoop(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.executeUpdate(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeUpdate(Unknown Source)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:817)
    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:1)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)
    ... 11 more

你能帮助我找出可能导致错误的原因The parameter of type 61 did not have a valid value.,该字段属于我所怀疑的char(2)类型。

它很少发生,所以我们无法重现它。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

这是Sybase错误消息。

  

说明:由于无效或非法请求,命令失败。检查语法,语义和权限。采取任何纠正措施。

查看Documentation

尝试捕获Exception并使用catch语句中的值打印param列表,这样您就可以在值发生时检查它们。

答案 1 :(得分:0)

不幸的是,您没有向我们展示您的代码和数据库架构。但我认为异常非常清楚。它说有两种类型:java类型和DB类型不兼容。

据我了解,您尝试将charchar[]插入varchar类型的DB列或类似内容中。再次检查。可能你必须在将char数组插入数据库之前将其转换为字符串。

答案 2 :(得分:0)

Sybase类型61是TDS 5.0 Reference Pages(0x3D = 61十进制)。 Datatype Summary TDS中描述了此类型 这意味着服务器不喜欢由于<div class="grid-item"><div class="grid-con" style="background:url(http://image-goes-here.com/img.jpg);"></div></div> // etc... 数据包之前的参数大小,内容或参数错误而导致的价值。