[英]java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option
I am creating a new table in Oracle DB using java jdbc and ending up in missing or invalid option. 我正在使用java jdbc在Oracle DB中创建一个新表,并最终出现丢失或无效的选项。 Dont know what is wrong in the query as such
这样就不知道查询中出了什么问题
I have tried running the same query in SQL Plus and SQL Developer and it just works fine but when run through java jdbc its throwing the above error. 我试过在SQL Plus和SQL Developer中运行相同的查询,但效果很好,但是在通过java jdbc运行时,抛出上述错误。 This is the same extract from java code as well.
这也是从Java代码中提取的内容。 Using executeUpdate() method for this.
为此使用executeUpdate()方法。
CREATE TABLE EventTable (
"EVENTID" NUMBER, "MODULE" NVARCHAR2(512),"EVENTTYPE" NVARCHAR2(512),
"MODULEANDEVENTTEXT" NVARCHAR2(512), "TIME" TIMESTAMP (6), "SOURCE" NVARCHAR2(512),
"SEVERITY" NVARCHAR2(512), "NODE" NVARCHAR2(512), "ACKNOWLEDGED" NUMBER(*,0),
"USERSID" NVARCHAR2(512), "DID" NVARCHAR2(512), "MID" NVARCHAR2(512), "FH" NVARCHAR2(512),
"LD" NVARCHAR2(512), "TD" NVARCHAR2(512), "ED" NVARCHAR2(512), "UD" NVARCHAR2(512),
"GD" NVARCHAR2(512), PRIMARY KEY ("EVENTID")
);
java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option java.sql.SQLSyntaxErrorException:ORA-00922:缺少或无效的选项
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.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361)
Java Snippet Java代码段
countQuery.append(
"CREATE GLOBAL TEMPORARY TABLE EventTable ( \"EVENTID\" NUMBER, \"MODULE\" NVARCHAR2(512),\"EVENTTYPE\" NVARCHAR2(512), \"MODULEANDEVENTTEXT\" NVARCHAR2(512), \"TIME\" TIMESTAMP , \"SOURCE\" NVARCHAR2(512), \"SEVERITY\" NVARCHAR2(512), \"NODE\" NVARCHAR2(512), \"ACKNOWLEDGED\" NUMBER(*,0), \"USERSID\" NVARCHAR2(512), \"DESKTOPID\" NVARCHAR2(512), \"MACHINEID\" NVARCHAR2(512), \"FOLDERPATH\" NVARCHAR2(512), \"LUNID\" NVARCHAR2(512), \"THINAPPID\" NVARCHAR2(512), \"ENDPOINTID\" NVARCHAR2(512), \"USERDISKPATHID\" NVARCHAR2(512), \"GROUPID\" NVARCHAR2(512), PRIMARY KEY (\"EVENTID\")); ");
PreparedStatement stmt = connection.prepareStatement(countQuery);
stmt.executeUpdate();
Solution: 解:
you will need to use Statement
object and create instance of it to execute "create global temporary
table" query [ createStatment
instead of prepareStatment
您将需要使用
Statement
对象并创建其实例以执行“创建global temporary
表”查询[ createStatment
而不是prepareStatment
Reason : 原因:
global temporary
is not valid DDL to run from connection.PreparedStatment() global temporary
不是有效的DDL,无法从connection.PreparedStatment()运行
Fix: 固定:
Statement stmt = con.createStatement();
stmt.executeUpdate(countQuery)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.