2014-11-29 7 views
2

Следующая часть моего образца кода:Как исправить: ON DELETE CASCADE ON UPDATE CASCADE, используя котелок/EmbeddedDriver

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: Синтаксическая ошибка: Обнаружена" CASCADE "в строке 1, столбец 196. на org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException (Неизвестный источник) на org.apache.derby.impl. jdbc.Util.generateCsSQLException (Неизвестный источник) at org.apache.derby.impl.jdbc.TransactionResourc eImpl.wrapInSQLException (Неизвестный источник) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException (Неизвестный источник) at org.apache.derby.impl.jdbc.EmbedConnection.handleException (Неизвестный источник) at org.apache .derby.impl.jdbc.ConnectionChild.handleException (Неизвестный источник) на org.apache.derby.impl.jdbc.EmbedStatement.execute (Неизвестный источник) на org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate (Неизвестно) Source) at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate (Неизвестный источник) at TrialDBEmbedded.main (TrialDBEmbedded.java:26) Вызвано: ОШИБКА 42X01: Синтаксическая ошибка: Обнаружен «CASCADE» в строке 1 , столбец 196. по адресу org.apache.derby.iapi.error.StandardException.newException (Unk nown Source) at 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 (Unknown Source) ... подробнее 4

ответ

1

кажется, что Derby просто не поддерживает ON UPDATE CASCADE. A feature request был подан девять (9) лет назад, но, по-видимому, он никогда не был реализован. Используя Derby 10.8, я только что подтвердил, что ON UPDATE RESTRICT работает, но ON UPDATE CASCADE генерирует исключение, которое вы получаете. (ON DELETE CASCADE тоже работает.)

+0

Это очень фундаментальная вещь, которая отсутствует в дерби .. это 2017 год и версия 10.13. Я до сих пор не могу использовать ON UPDATE CASCADE. (Это отстой) – kiwicomb123

 Смежные вопросы

  • Нет связанных вопросов^_^