使用PreparedStatement设置连接级变量

问题描述 投票:0回答:1

在下面的代码中,注释掉的行成功设置了

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 文档,但尚未找到任何有关此的信息。

java jdbc prepared-statement sqlanywhere
1个回答
-1
投票

使用PreparedStatement时可以使用'?'为了稍后在代码中向“?”添加一个值,例如,如果您想检查是否

integer = 123
,您需要添加行:
ps.setInt(1,123)
,这样您将设置第一个“?” '到整数值 123,请确保在声明 ps 之后执行此操作。

如果这仍然不起作用,您可以随时尝试这样做:

int x = 123; String sql = "create or replace variable myVariable integer = " + x;
而不是使用“?”

如果仍然不起作用,那么唯一可能导致此错误的原因是变量类型之间的不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.