我一直在试图找出为什么下面的代码不会产生在我的ResultSet中的任何数据:Java中的参数化Oracle SQL查询?
String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL = ? ";
PreparedStatement prepStmt = conn.prepareStatement(sql);
prepStmt.setString(1, "Waterloo");
ResultSet rs = prepStmt.executeQuery();
在另一方面,以下运行正常:
String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL = 'Waterloo' ";
PreparedStatement prepStmt = conn.prepareStatement(sql);
ResultSet rs = prepStmt.executeQuery();
数据类型学校是CHAR(9字节)。而不是setString,我也试过:
String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL = ? ";
PreparedStatement prepStmt = conn.prepareStatement(sql);
String school = "Waterloo";
Reader reader = new CharArrayReader(school.toCharArray());
prepStmt.setCharacterStream(1, reader, 9);
prepStmt.setString(1, "Waterloo");
ResultSet rs = prepStmt.executeQuery();
我完全停留在接下来的调查中; Eclipse调试器说,即使在setString或setCharacterStream之后,SQL查询也不会改变。我不确定是否因为设置参数不起作用,或者调试器无法获取PreparedStatement中的更改。
任何帮助将不胜感激,谢谢!
需要检查的两件事:1)如果您不使用表格,其中一列的名称与表格相同,是否仍会发生? 2)你确定你正在对结果集进行迭代 - 如果你对查询进行硬编码而不是使用参数,你会得到结果吗? – 2010-08-10 16:43:23
对于它的价值,你的第一个例子对我来说看起来很好。乔恩可能会在“学校”表中的“学校”专栏中提到 - 这个*不应该成为问题,但是你的代码不应该失败...... – 2010-08-10 16:53:57
出于好奇,试试第一个示例(带'?'的示例),但将参数设置为带有尾部空格的“Waterloo”。 MySQL应该忽略尾随空格,但是在这种情况下,司机可能会做些简单的事情。 – 2010-08-10 17:03:42