Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绑定主机变量的长度超过MaxLength_Java_Sql_Sap Iq - Fatal编程技术网

Java 绑定主机变量的长度超过MaxLength

Java 绑定主机变量的长度超过MaxLength,java,sql,sap-iq,Java,Sql,Sap Iq,我遇到了Sybase IQ服务器抛出的一条神秘错误消息 com.sybase.jdbc2.jdbc.SybSQLException:ASA错误-1001019:函数 长度超过255个绑定主机变量的varchar上不支持 超过MaxLength, --(df_Heap.cxx 2145) 位于com.sybase.jdbc2.tds.tds.processEed(tds.java:2636) 位于com.sybase.jdbc2.tds.tds.nextResult(tds.java:1996)

我遇到了Sybase IQ服务器抛出的一条神秘错误消息

com.sybase.jdbc2.jdbc.SybSQLException:ASA错误-1001019:函数 长度超过255个绑定主机变量的varchar上不支持 超过MaxLength, --(df_Heap.cxx 2145) 位于com.sybase.jdbc2.tds.tds.processEed(tds.java:2636) 位于com.sybase.jdbc2.tds.tds.nextResult(tds.java:1996) 位于com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69) 位于com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:204) 位于com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:187) 位于com.sybase.jdbc2.jdbc.SybStatement.updateLoop(SybStatement.java:1642) 位于com.sybase.jdbc2.jdbc.SybStatement.executeUpdate(SybStatement.java:1625) 位于com.sybase.jdbc2.jdbc.SybPreparedStatement.executeUpdate(SybPreparedStatement.java:91) 位于ibs.dao.CM3RM1DAO.updateTable(CM3RM1DAO.java:197) 在ibs.dao.CM3RM1DAO.isxmlmprocessed上(CM3RM1DAO.java:88) 位于ibs.xml.parser.XMLParser.parsingXMLIntoBO(XMLParser.java:2125) 位于ibs.common.util.MainClass.main(MainClass.java:74)

我们有几个列(
DESCRIPTION
等),类型为
varchar(4000)
。但是,我可以直接更新它们,而不会出现任何错误。而且,我没有看到任何代码指定任何绑定变量,所以我不知道消息来自哪里

这是代码(我对其进行了一些修改):


感谢您的帮助

问号是绑定变量。您的
stmt.set…(…)
语句之一试图设置一个超出数据库列允许长度的值。尝试显示您正在设置的每个Java字符串的长度。

最后,我能够用客户发送的示例数据重现错误

其中一个字段的数据类型是VarChar(4000)。但是,用户试图用32k字符的数据更新此字段

一旦我截断了数据,数据就被成功更新了

我以为Sybase会自动截断数据,但显然不会

String sql = "UPDATE TABLEX SET " + 
"COMPANY = ?, CUSTOMER_REFERENCE= ?, " +
"STATUS = ?, CONTACT_FIRST_NAME = ?, CONTACT_LAST_NAME = ?, " +
"SEVERITY = ?, PRIORITY_CODE = ?, REQUESTEDDATE = ?, " +
"CLOSE_TIME = ?, LEAD_TIME = ?, CHANGE_REASON = ?, MODTIME = ? WHERE NUMBER = ?";

stmt = conn.prepareStatement(sql);

for loop here
{
    stmt.setString(...);
    .
    .
    stmt.executeUpdate();
}