我需要将OracleDataSource用于学校项目。我已经在Oracle Developer上创建并测试了查询,并且得到了正确的输出。当我尝试通过Java代码执行查询时,出现以下错误:java.sql.SQLSyntaxErrorException: ORA-00936: missing expression。我在网上做了一些挖掘,有人说这可能是由于WHERE子句引起的。所以我在执行查询之前先打印出查询。查询是这样的:SELECT b.ISBN, b.TITLE, COUNT() FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.SUBJECT_ID IN (47,46,43) GROUP BY b.ISBN, b.TITLE ORDER BY COUNT() DESC如果我在Developer中键入相同的查询,则可以使用,但是当我运行java类时,会收到ORA错误。我以这种方式形成我的查询:
Statement stmt = conn.createStatement(); String query = "SELECT b.ISBN, b.TITLE, COUNT(*) FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.SUBJECT_ID IN ("; PreparedStatement ps = conn.prepareStatement(query);
for(int i = 0; i < args.length; i++) { //int psVar = i + 1; //ps.setInt(psVar, Integer.parseInt(args[i])); if(i == args.length - 1) { query += args[i] + ")"; } else { query += args[i] + ","; } }
query += " GROUP BY b.ISBN, b.TITLE ORDER BY COUNT(*) DESC";
//Execute the query System.out.println(query); ResultSet rset = ps.executeQuery(); 我迷路了,谢谢你的帮助
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您的问题是,在完成构造查询之前,您正在准备查询。将PreparedStatement ps = conn.prepareStatement(query);最后一次赋值之后的移到query,并对每个参数使用占位符:
Statement stmt = conn.createStatement(); String query = "SELECT b.ISBN, b.TITLE, COUNT(*) FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.SUBJECT_ID IN (";
for(int i = 0; i < args.length; i++) { if(i == args.length - 1) { query += "?)"; } else { query += "?, "; } }
query += " GROUP BY b.ISBN, b.TITLE ORDER BY COUNT(*) DESC"; PreparedStatement ps = conn.prepareStatement(query);
for(int i = 0; i < args.length; i++) { int psVar = i + 1; ps.setInt(psVar, Integer.parseInt(args[i])); }
ResultSet rset = ps.executeQuery();