如何解决:使用derby / EmbeddedDriver在更新CASCADE上删除DELETE CASCADE

阿里亚德涅

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

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();
}

而且我总是收到这些错误消息:

线程“主”中的异常java.sql.SQLSyntaxErrorException:语法错误:在org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知源)的第1行,第196列遇到了“ CASCADE”。 org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(未知源)位于org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(未知源)位于.impl.jdbc.Util.generateCsSQLException(未知源) org.apache.derby.impl.jdbc.ConnectionChild.handleException(未知源)(位于org.apache.derby.impl.jdbc.EmbedStatement.execute(未知源)处的.apache.derby.impl.jdbc.EmbedConnection.handleException(未知源)源)位于org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(未知源),位于org.apache.derby.idb.jmbc.EmbedStatement。在TrialDBEmbedded.main(TrialDBEmbedded.java:26)上的executeUpdate(未知源)由以下原因引起:错误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 org.apache.derby.impl.sql.GenericStatement.prepMinion(未知源)的org.apache.derby.impl.sql.GenericStatement.prepare(未知源)的sql.compile.ParserImpl.parseStatement(未知源) .apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知来源)...还有4个CASCADE”,位于第1行,第196列。位于org.apache的org.apache.derby.iapi.error.StandardException.newException(未知源)的org.apache.derby.iapi.error.StandardException.newException(未知源)。 org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(未知源)的derby.impl.sql.compile.ParserImpl.parseStatementOrSearchCondition(未知源)org.apache.derby.impl.sql.GenericStatement.prepMinion( org.apache.derby.impl.sql.GenericStatement.prepare上的未知源(org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知源)上的未知源... 4更多CASCADE”,位于第1行,第196列。位于org.apache的org.apache.derby.iapi.error.StandardException.newException(未知源)的org.apache.derby.iapi.error.StandardException.newException(未知源)。 org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(未知源)的derby.impl.sql.compile.ParserImpl.parseStatementOrSearchCondition(未知源)org.apache.derby.impl.sql.GenericStatement.prepMinion( org.apache.derby.impl.sql.GenericStatement.prepare上的未知源(org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知源)上的未知源... 4更多位于org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(未知源)的org.apache.derby.impl.sql.GenericStatement.prepMinion(未知源)的org.apache.derby.impl.sql。 derby.impl.sql.GenericStatement.prepare(未知源),位于org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知源)... 4另外位于org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(未知源)的org.apache.derby.impl.sql.GenericStatement.prepMinion(未知源)的org.apache.derby.impl.sql。 derby.impl.sql.GenericStatement.prepare(未知源),位于org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(未知源)... 4另外

戈德·汤普森

看来Derby根本不支持ON UPDATE CASCADE一项功能请求是在九(9)年前提交的,但显然从未实现。我刚刚使用Derby 10.8确认了它的ON UPDATE RESTRICT工作原理,但是ON UPDATE CASCADE抛出了您遇到的异常。ON DELETE CASCADE也可以。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章