复制一些进行更新的现有代码,以执行查询。
PreparedStatement pstmt2 = connection.prepareStatement(sql);
pstmt2.executeUpdate();
成为
PreparedStatement pstmt2 = connection.prepareStatement(sql);
pstmt2.executeQuery(sql);
执行代码时,收到此异常。我怀疑此异常仅由sybase产生。
答案 0 :(得分:0)
贷记给专家交流以寻求指导-使用方法createStatement而不是prepareStatement。
SQL应该是: 语句pstmt2 = dbconn2.createStatement(); ResultSet结果= pstmt2.executeQuery(sql);
答案 1 :(得分:0)
引用Statement.executeQuery(String)
的文档中的内容:
投掷:
SQLException
-如果发生数据库访问错误,这 在给定的SQL语句的封闭Statement
上调用方法 产生一个ResultSet
对象,该方法在PreparedStatement
或CallableStatement
换句话说,使用executeQuery(String)
(或其他任何接受字符串的execute
方法)是错误的,并且应该在所有JDBC兼容驱动程序中引发异常。因此,Sybase在这里抛出异常是正确的,也是预期的。
此要求是在JDBC 4.1(Java 7)中引入的,早期的JDBC规范并未明确包含此要求,尤其是MySQL(和iirc MariaDB)Connector / J不幸地仍然忽略了规范的这一部分。
您应该使用
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
// set parameters
try (ResultSet rs = pstmt.executeQuery()) {
// process result set
}
}
或(如果未使用参数化语句):
try (Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
// process result set
}