java - 如何修复 : ON DELETE CASCADE ON UPDATE CASCADE using derby/EmbeddedDriver

标签 java jdbc derby embedded-database

以下是我的示例代码的一部分:

public static void main(String[] args) throws Exception {
    // TODO code application logic here
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    Connection c = DriverManager
            .getConnection("jdbc:derby:DatabaseTrial;create=true");

    System.out.println("connection ok");

    String schema = "CREATE SCHEMA ABC";
    String subj = "CREATE TABLE ABC.SUBJ (SUBJ_NO INT NOT NULL, DESCRIPTIVE_TITLE VARCHAR(80) NOT NULL, TEACHER VARCHAR(80), PRIMARY KEY (SUBJ_NO))";
    String table = "CREATE TABLE ABC.REQ (REQ_NO INT NOT NULL, " + 
    "STATUS CHAR(8) DEFAULT NULL, SUBJ_NO INT NOT NULL, PRIMARY KEY (REQ_NO), FOREIGN KEY (SUBJ_NO) REFERENCES ABC.SUBJ(SUBJ_NO) ON DELETE CASCADE ON UPDATE CASCADE)";
    String insert = "INSERT INTO ABC.REQ VALUES (1, DEFAULT, 1)";
    String insert2 = "INSERT INTO ABC.SUBJ VALUES (1, 'Programming Application Lab', 'Mr. CBO Montes')";    

    Statement s = c.createStatement();

    s.executeUpdate(schema);
    s.executeUpdate(subj);
    s.executeUpdate(table);
    s.executeUpdate(insert2);
    s.executeUpdate(insert);

    ResultSet rs = s.executeQuery("SELECT * FROM ABC.MINE NATURAL JOIN ABC.SUBJ");
    while (rs.next()) {
        System.out.println(rs.getInt(1) + " " + rs.getString("STATUS") + " " + rs.getString("Subj_no") + " " + rs.getString("DESCRIPTIVE_TITLE") + " " + rs.getString("TEACHER"));
    }

    c.close();
}

我总是收到这些错误信息:

线程“main”中的异常 java.sql.SQLSyntaxErrorException:语法错误:在第 1 行第 196 列遇到“CASCADE”。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源) 在 org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(未知来源) 在 org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection.handleException(未知来源) 在 org.apache.derby.impl.jdbc.ConnectionChild.handleException(未知来源) 在 org.apache.derby.impl.jdbc.EmbedStatement.execute(未知来源) 在 org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(未知来源) 在 org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(未知来源) 在 TrialDBEmbedded.main(TrialDBEmbedded.java:26) 原因:错误 42X01:语法错误:在第 1 行第 196 列遇到“CASCADE”。 在 org.apache.derby.iapi.error.StandardException.newException(未知来源) 在 org.apache.derby.iapi.error.StandardException.newException(未知来源) 在 org.apache.derby.impl.sql.compile.ParserImpl.parseStatementOrSearchCondition(未知来源) 在 org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(未知来源) 在 org.apache.derby.impl.sql.GenericStatement.prepMinion(未知来源) 在 org.apache.derby.impl.sql.GenericStatement.prepare(未知来源) 在 org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知来源) ... 还有 4 个

最佳答案

Derby 似乎根本不支持ON UPDATE CASCADEfeature request是在九 (9) 年前提交的,但显然从未实现过。使用 Derby 10.8,我刚刚确认 ON UPDATE RESTRICT 有效,但是 ON UPDATE CASCADE 抛出了您遇到的异常。 (ON DELETE CASCADE 也有效。)

关于java - 如何修复 : ON DELETE CASCADE ON UPDATE CASCADE using derby/EmbeddedDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27202591/

相关文章:

glassfish - Geronimo 与 Glassfish

java - 为什么数组不能分配给Iterable?

java - 如何执行更新

java - java中的算术平均值

java - 尽管表中有很多行,JDBC ResultSet 只给出一行?

java - JDBC 数据行等效项

database - 如何读取 Apache Derby 数据库日志?

timestamp - 将 Unix 纪元时间转换为 Apache Derby 中的日期

java - 如何将我的桌面 Java 应用程序连接到现有的 GAE 数据存储?

java - 在 JSONArray 中解析 JSONArray