java.sql.SQLException:调用中的参数无效:getBytes()

Posted

技术标签:

【中文标题】java.sql.SQLException:调用中的参数无效:getBytes()【英文标题】:java.sql.SQLException: Invalid argument(s) in call: getBytes() 【发布时间】:2020-06-21 03:02:34 【问题描述】:

我正在尝试使用以下代码将 blob 转换为字符串:

ResultSet rs = stmt.executeQuery(query);

Blob newValueBLOB = rs.getBlob("NEW_VALUE");
System.out.println(newValueBLOB);
String newValue = new String(newValueBLOB.getBytes(0, (int) newValueBLOB.length()));

我的数据库是 Oracle 并且连接建立正确。我找到了类似的答案,但我的不工作!

【问题讨论】:

请阅读minimal reproducible example并相应地完善您的问题。 【参考方案1】:

来自Blob#getBytes 的 Javadoc:

byte[] getBytes(long pos, int length) 抛出 SQLException pos - 要提取的 BLOB 值中第一个字节的序号位置;第一个字节在位置 1

因此,您对getBytes() 的调用应该传入 1 作为开始位置,而不是零:

String newValue = new String(newValueBLOB.getBytes(1, (int) newValueBLOB.length()));

作为替代方案,可能更简单,您可以直接使用ResultSet#getBytes

ResultSet rs = stmt.executeQuery(query);
byte[] newValue = rs.getBytes("NEW_VALUE");
String newValueStr = new String(newValue);

【讨论】:

以上是关于java.sql.SQLException:调用中的参数无效:getBytes()的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException: 调用中无效的参数DSRA0010E: SQL 状态 = null,错误代码 = 17,433

java.sql.SQLException:Io 异常:在与 oracle 的 JDBC 连接期间从读取调用中得到减一

JDBC - 从 JAVA 调用 PLSQL 给出 Java.sql.SQLException: ORA-06550

启动tomcat时报错了, nested exception is java.sql.SQLException: 调用中无效的参数

java.sql.SQLException: ORA-01008: 并非所有变量都使用 Mybatis 3 绑定

H2 java.sql.SQLException:找不到合适的驱动程序