[英]java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
[英]java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option
我正在使用java jdbc在Oracle DB中創建一個新表,並最終出現丟失或無效的選項。 這樣就不知道查詢中出了什么問題
我試過在SQL Plus和SQL Developer中運行相同的查詢,但效果很好,但是在通過java jdbc運行時,拋出上述錯誤。 這也是從Java代碼中提取的內容。 為此使用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:缺少或無效的選項
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代碼段
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();
解:
您將需要使用Statement
對象並創建其實例以執行“創建global temporary
表”查詢[ createStatment
而不是prepareStatment
原因:
global temporary
不是有效的DDL,無法從connection.PreparedStatment()運行
固定:
Statement stmt = con.createStatement();
stmt.executeUpdate(countQuery)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.