Java Create User Quota子句缺少或选项无效

Java Create User Quota子句缺少或选项无效,java,oracle,prepared-statement,Java,Oracle,Prepared Statement,在DBeaver或sqplus上执行此语句非常有效 CREATE USER flyway IDENTIFIED BY password DEFAULT TABLESPACE system TEMPORARY TABLESPACE system QUOTA 20M on system; 但是如果我在java preparedstatement中使用它,就像这样 Class.forName("oracle.jdbc.driver.OracleDriver");

在DBeaver或sqplus上执行此语句非常有效

CREATE USER flyway IDENTIFIED BY password 
DEFAULT TABLESPACE system  
TEMPORARY TABLESPACE system 
QUOTA 20M on system;
但是如果我在java preparedstatement中使用它,就像这样

Class.forName("oracle.jdbc.driver.OracleDriver");

    //step2 create  the connection object
    Connection con = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:xe", "myuser", "mypassword")

    //step3 create the statement object
    Statement stmt = con.createStatement();

    //step4 execute query
    stmt.executeUpdate("CREATE USER flyway IDENTIFIED BY password "+
            "DEFAULT TABLESPACE system  "+
            "TEMPORARY TABLESPACE system "+
            "QUOTA 20M on system;"
                            );

    //step5 close the connection object
    con.close();
上面说 java.sql.SQLSyntaxErrorException:ORA-00922:缺少或无效选项


现在,如果我删除“系统上的2000万配额”,它可以正常工作。但这个配额是正确的语法,所以我不明白它为什么失败。为什么不能从java设置配额?

Alex Poole是正确的POSTGRES驱动程序,可以很好地使用;但是Oracle one失败了,错误无人能理解

只删除分号。这是一个语句分隔符,在执行单个语句时会导致类似的错误。您是对的!作为附带观察,您不应该创建默认和/或临时表空间设置为SYSTEM的用户。该表空间应该保留给oracle自己使用。而且,您永远不应该使用永久表空间(如系统)作为任何人的临时TS。