在下面的代码中,注释掉的行成功设置了
myVariable
,并且本节后面的操作按预期执行。但是,当使用未注释的变体时,conn.prepareStatement(sql)
会产生错误:“java.sql.SQLException: [SAP][JDBC Driver][SQL Anywhere]第 1 行‘主机变量’附近的语法错误”
try {
// String sql = "create or replace variable myVariable integer = 123";
String sql = "create or replace variable myVariable integer = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 123);
// (...more code...)
} catch (SQLException e) {
System.out.println(e);
}
按照调试器中的执行流程,错误发生在
ps.setInt(1, 123);
之前(永远不会到达该行。)
看来我对这个准备好的语句使用了错误的语法,或者 JDBC 或 SQLAnywhere 可能存在一些限制。我一直在搜索 SAP 文档,但尚未找到任何有关此的信息。
使用PreparedStatement时可以使用'?'为了稍后在代码中向“?”添加一个值,例如,如果您想检查是否
integer = 123
,您需要添加行:ps.setInt(1,123)
,这样您将设置第一个“?” '到整数值 123,请确保在声明 ps 之后执行此操作。
如果这仍然不起作用,您可以随时尝试这样做:
int x = 123; String sql = "create or replace variable myVariable integer = " + x;
而不是使用“?”
如果仍然不起作用,那么唯一可能导致此错误的原因是变量类型之间的不匹配。