当我尝试执行此JDBC查询时,为什么我获得此“SQLSyntaxErrorException:ORA-00933:SQL命令未正确结束”?

尝试在Java应用程序中实现简单的JDBC查询时遇到一些问题。

所以我有以下查询:

SELECT D.* FROM coda_tx c, documenti_tx d WHERE C.FK_TIPO_DOC = 99 AND C.FK_STATO = 1 AND C.FK_PIVA_MITTENTE = '05779711000' AND C.PK_CODA = D.PFK_CODA AND C.CANALE='STA' 

如果我将它运行到Oracle SQL Developer中,它运行良好,我获得了2条记录。

所以我必须将这个查询实现到我的应用程序的DAO类中,其中我定义了以下方法:

 public void getListaFatturePDF(String partitaIva) { System.out.println("INTO ottieniListaFatturePDF()"); Blob blobPdf; String sql; StringBuffer sb = new StringBuffer(); sb.append("SELECT D.*"); sb.append("FROM coda_tx c, documenti_tx d"); sb.append("WHERE C.FK_TIPO_DOC = 99"); sb.append("AND C.FK_STATO = 1"); sb.append("AND C.PK_CODA = D.PFK_CODA"); sb.append("AND C.CANALE='STA'"); sb.append("AND C.FK_PIVA_MITTENTE = '"); sb.append(partitaIva); sb.append("';"); sql = sb.toString(); try { statment = connection.createStatement(); ResultSet rs = statment.executeQuery(sql); System.out.println("ResultSet obtained"); } catch (SQLException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } 

问题是当我尝试执行前面的方法时抛出以下SQLException

 java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:30) at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:762) at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111) at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1309) at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:422) at DAO.FatturaDAO.getListaFatturePDF(FatturaDAO.java:43) at mainPkg.Main.main(Main.java:74) 

为什么? 我认为SQL语法可能有问题,但我不确定(因为如果我在Oracle SQL Developer中执行查询它工作正常)我缺少什么? 我该如何解决?

TNX

executeQuery()在执行时会自动为语句添加分号。

改变行sb.append("';");sb.append("'");

此外,您还需要在每行的末尾或开头添加空格,否则您的语句无效。

在每一行的末尾添加一个空格,以便下一行的关键字不会与它成块,例如:

 sb.append("SELECT D.* "); 

代替

 sb.append("SELECT D.*"); 

并删除尾随分号。