我在使用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。
有人可以提供一些有用的信息吗?
答案 0 :(得分:1)
您必须避免在预备句中设置字符串。
在preparedStatement中,您需要设置实际类型。
ps.setString(1, tool_code);
ps.setInt(2, tool_number);
ps.setInt(3, unit);
ps.setString(4, part_id);
就像你必须做的那样