2010-11-29 4 views
0

J'ai deux tables définies comme ci-dessous; Lorsque je supprime une ligne de RELHOSPOL du gestionnaire SQL avec l'exécution d'une commande DELETE, il annule les lignes nécessaires à la table USER. Chaque fois que je supprime une ligne de l'application avec la méthode écrite ci-dessous, elle supprime uniquement la ligne de RELHOSPOL, et ne définit pas les lignes nécessaires à la table USER. Quel est le point manquant?Problèmes de clé étrangère SQLite

CREATE TABLE [USER] (
    [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    [GROUPID] INTEGER CONSTRAINT [FK_USER_GID] REFERENCES [GROUP]([ID]) ON DELETE SET NULL ON UPDATE CASCADE, 
    [HOSPITALID] INTEGER, 
    [POLIKLINIKID] INTEGER, 
    [NAME] VARCHAR(50) NOT NULL, 
    [LOGINID] VARCHAR(15) NOT NULL, 
    [EMAIL] VARCHAR(50) NOT NULL, 
    [PASSWORD] VARCHAR(32) NOT NULL, 
    CONSTRAINT [FK_USER_RELHOSPOL] FOREIGN KEY([HOSPITALID], [POLIKLINIKID]) REFERENCES [RELHOSPOL]([HOSPITALID], [POLIKLINIKID]) ON DELETE SET NULL ON UPDATE CASCADE); 

CREATE UNIQUE INDEX [AS] ON [USER] ([LOGINID]); 
CREATE UNIQUE INDEX [AS1] ON [USER] ([EMAIL])); 

CREATE TABLE [RELHOSPOL] (
    [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    [HOSPITALID] INTEGER, 
    [POLIKLINIKID] INTEGER); 

CREATE UNIQUE INDEX [UNIQUE_RELHOSPOL] ON [RELHOSPOL] ([HOSPITALID], [POLIKLINIKID]); 

public void deletePoliklinikFromHospital(int hospitalId, int poliklinikId) throws SQLException{ 

     String query = "DELETE FROM [RELHOSPOL] WHERE (HOSPITALID = ? AND POLIKLINIKID = ?)"; 
     try { 
      PreparedStatement statement = db.prepareStatement(query); 
      statement.setInt(1, hospitalId); 
      statement.setInt(2, poliklinikId); 
      statement.executeUpdate(); 
     } catch (SQLException e) { 
      throw new SQLException(e.getMessage()); 
     } 
    } 

Répondre

0

Vous devez turn on enforcement of foreign keys, qui est désactivé par défaut pour des raisons de compatibilité descendante. C'est une option de configuration par connexion. Ajoutez ceci comme l'une des premières choses que vous faites une fois que vous avez fait un Connection:

PRAGMA foreign_keys = on;