【发布时间】:2017-07-23 09:03:12
【问题描述】:
正在使用的 SQL 是:
SET @person1_id = ?;
SET @person2_id = ?;
SET @safety_factor = ?;
SELECT *
FROM table
WHERE person1 = @person1_id
AND person2 = @person2_id
AND safety_factor = @safety_factor;
这不是确切的代码,但显示了我正在尝试做的事情
然后我输入参数的方式是
Statement stmt = connection.prepareStatement(*script*)
stmt.setLong(1, person1.id)
stmt.setLong(2, person2.id)
stmt.setBigDecimal(3, safetyFactor)
我在 sql 中使用变量,因为这些值在整个脚本中重复使用,我不想多次输入相同的值作为不同的参数。
这给了我一个错误,
线程“主”org.h2.jdbc.JdbcSQLException 中的异常:无效值 “2”代表参数“parameterIndex”[90008-195]
我想这是因为脚本被视为四个单独的语句,但我不知道如何分别执行它们并使变量在语句之间起作用。
【问题讨论】:
-
什么是“stmt”。我从你的错误信息中猜测问题是 stmt 有一个数组,它没有用正确数量的元素初始化。
-
更新解释什么是 stmt。没有使用数组,唯一的参数是上面示例 sql 中显示的参数
-
我在这里猜测问题出在 prepareStatement(script) 内部。您的 sql 的第一行(在第一个“;”之前)仅包含一个参数。因此,我想这只允许您随后添加一个参数。你需要你的第一个 sql 语句来使用所有三个参数。
-
你能不使用临时表,让你的第一条语句为 INSERT INTO tmpTable VALUES(x, y, z),然后从那里访问变量吗?最好还是创建一个存储过程,特别是如果您有多个语句要执行。
-
为什么不直接省略前三行,而将
SELECT * FROM table WHERE person1 = ? AND person2 = ? AND safety_factor = ?;用于SQL?