开发者社区 问答 正文

通过Java类运行时出现ORA-00936错误

我需要将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

展开
收起
保持可爱mmm 2019-11-18 11:50:29 577 分享 版权
1 条回答
写回答
取消 提交回答
  • 您的问题是,在完成构造查询之前,您正在准备查询。将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();

    2019-11-18 11:50:38
    赞同 展开评论