java.sql.SQLException:ORA-01036:非法变量名称/编号

时间:2014-12-15 12:38:47

标签: java oracle11g

我在使用Java和Oracle 11g运行的Oracle查询中遇到了一个奇怪的问题。相同的查询在Oracle 10g中运行良好。 tool_availability是一个视图。

final String SELECT_SQL = "select * " +
            "from tool_availability " +
            "where tool_code = ? " +
            "and tool_number = ? " +
            "and unit = ? " +
            "and part_id = ? ";

ps = con.prepareStatement(SELECT_SQL);
ps.setFetchDirection(ResultSet.FETCH_FORWARD);
ps.setFetchSize(1);
ps.setString(1, tool_code);
ps.setString(2, tool_number);
ps.setString(3, unit);
ps.setString(4, part_id);
rs = ps.executeQuery();

查询在“?”之前和之后都有空格标记。相同的查询不适用于11g,我收到以下错误:

java.sql.SQLException: ORA-01036: illegal variable name/number  

如果我删除“?”之前和之后的空格标记。相同的查询正在使用11g。

有人可以提供一些有用的信息吗?

1 个答案:

答案 0 :(得分:1)

您必须避免在预备句中设置字符串。

在preparedStatement中,您需要设置实际类型。

ps.setString(1, tool_code);
ps.setInt(2, tool_number);
ps.setInt(3, unit);
ps.setString(4, part_id);

就像你必须做的那样