java - ORA-00933 SQL 命令未正确结束,但在 SQL Developer 中正常

标签 java oracle jdbc oracle-sqldeveloper oracle12c

我希望有人能够找到我的查询的问题所在,因为我无法发现其中的错误,并且 Oracle SQL Developer 似乎运行与我的 Java Swing 应用程序中的代码相同的查询。

我在 SQL Developer 中的查询:

SELECT 
    ad.ID,ad.Script_Name,ad.Current_Status,
    ad.Issues_found_during_run,ad.Testers,
    ad.Run_Date,ad.Tools,u.fTag,u.role,
    dbms_lob.substr(u.avatar) 
FROM 
    allData ad 
INNER JOIN 
    users u 
ON 
    u.fTag = ad.lastUserWhoUpdated 
GROUP BY 
    ad.ID,ad.Script_Name,ad.Current_Status,
    ad.Issues_found_during_run,ad.Testers,
    ad.Run_Date,ad.Tools,u.fTag,u.role,
    dbms_lob.substr(u.avatar) 
ORDER BY 
    ad.ID ASC;

它运行完美并返回我期望的所需记录。

但是,我的 Java Swing 应用程序中的相同查询似乎不喜欢它,因为它给了我以下错误:

java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended.

我的 Java Swing 应用程序代码:

connectToDB();

String query = 
      "SELECT " + 
        "ad.ID," + 
        "ad.Script_Name," + 
        "ad.Current_Status," + 
        "ad.Issues_found_during_run," + 
        "ad.Testers," + 
        "ad.Run_Date," + 
        "ad.Tools," + 
        "u.fTag," + 
        "u.role," + 
        "dbms_lob.substr(u.avatar) " + 
      "FROM " + 
        "allData ad " + 
      "INNER JOIN " + 
        "users u " + 
      "ON " + 
        "u.fTag = ad.lastUserWhoUpdated " +
      "GROUP BY " + 
        "ad.ID," + 
        "ad.Script_Name," + 
        "ad.Current_Status," + 
        "ad.Issues_found_during_run," + 
        "ad.Testers," + 
        "ad.Run_Date," + 
        "ad.Tools," + 
        "u.fTag," + 
        "u.role," + 
        "dbms_lob.substr(u.avatar) " + 
     "ORDER BY " + 
        "ad.ID;";

ResultSet rs = statement.executeQuery(query);            
ResultSetMetaData metaData = rs.getMetaData();
etc..etc..

这两个表的结构是:

SCRIPT_NAME                  VARCHAR2(100 BYTE)
CURRENT_STATUS               VARCHAR2(50 BYTE)
ISSUES_FOUND_DURING_RUN      VARCHAR2(150 BYTE)
TESTERS                      VARCHAR2(30 BYTE)
RUN_DATE                     DATE
TOOLS                        VARCHAR2(20 BYTE)
T_SUITE                      NUMBER(38,0)
NOE2                         VARCHAR2(5 BYTE)
NOE3                         VARCHAR2(5 BYTE)
ID                           NUMBER(38,0)
LASTUSERWHOUPDATED           NUMBER
DATELASTMOD                  DATE
<小时/>
FTAG                         NUMBER(38,0)   
ROLE                         VARCHAR2(15 BYTE)
AVATAR                       CLOB

那么,我可能会错过什么?

最佳答案

删除 ad.ID 后面的分号,如下所示。你不需要它

"ORDER BY " + 
    "ad.ID";

关于java - ORA-00933 SQL 命令未正确结束,但在 SQL Developer 中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59933467/

相关文章:

java - 如何通过JDBC提供数据库独立性?

java - 如何在搜索 API 中排除源字段?

java - 执行查找时无法实例化类 : com. sun.enterprise.naming.SerialInitContextFactory

linux - 在 Linux 中设置默认的 ORACLE_SID

oracle - ODP.NET 是否支持带有 DbContext 的 EF 模型优先?

jdbc - MariaDB JDBC 客户端日志记录对我不起作用

oracle - Clojure Lein 找不到 Oracle JDBC 驱动程序

java - 为什么我在这里使用 anyInt() 检测到 Mockito 错误放置的参数匹配器?

java - Spring H2数据库EmbeddedDatabaseFactory连接URL错误

sql - Oracle SQL WHERE 子句中的 (+) 符号是什么意思?