2016-04-21 86 views
-1

TABLE_BLOCKED_SMS,TABLE_BLOCK_LIST 我有两个表格,您可以在图片中显示这些结构。我用下面的sqlite语句创建了这个表。问题是,当我添加一些数据时,TABLE_BLOCKED_SMS中名为(fk_id_block_list)的外键没有显示任何数据,但它应该显示TABLE_BLOCK_LIST中id_block_list列的ID。善意帮助。没有任何数据显示到外键列

TABLE_BLOCKED_SMS

public static final String CREATE_TABLE_BLOCKED_SMS = "CREATE TABLE " + TABLE_BLOCKED_SMS 
      + "(" + ID_BLOCKED_SMS + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 0, " 
      + MESSAGE_BODY + " TEXT," 
      + FK_ID_BLOCK_LIST + " INTEGER," + 
      "FOREIGN KEY(" + FK_ID_BLOCK_LIST + ") REFERENCES " + TABLE_BLOCK_LIST + "(" + ID_BLOCK_LIST +"))"; 

TABLE_BLOCK_LIST:

public static final String CREATE_TABLE_BLOCK_LIST = "CREATE TABLE " + TABLE_BLOCK_LIST 
      + "(" + ID_BLOCK_LIST + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 0," 
      + ORIGINATING_ADDRESS + " TEXT)"; 

插入代码:

public boolean insertToBlockList(String originatingAddress,String messageBody){ 
     try { 
      SQLiteDatabase db = this.getWritableDatabase(); 
      ContentValues value_TABLE_BLOCK_LIST = new ContentValues(); 
      ContentValues value_TABLE_BLOCKED_SMS = new ContentValues(); 

      value_TABLE_BLOCK_LIST.put(ORIGINATING_ADDRESS, originatingAddress); 
      db.insert(TABLE_BLOCK_LIST, null, value_TABLE_BLOCK_LIST); 

      value_TABLE_BLOCKED_SMS.put(MESSAGE_BODY, messageBody); 
      db.insert(TABLE_BLOCKED_SMS, null, value_TABLE_BLOCKED_SMS); 
     } catch (Exception e) { 
      Log.d("Insertion to Block list", " error is" + e.getMessage()); 
     } 
     return true; 
    } 

删除代码:

public int delete(long id){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete(TABLE_BLOCK_LIST, ID_BLOCK_LIST + " = ?", new String[]{Long.toString(id)}); 
    } 
+0

你可以发表你插入的代码?你是否还在TABLE_BLOCK_LIST中插入了某些内容,以便FK_ID_BLOCK_LIST指向现有记录? –

+0

我已发布请看现在@MaximBerezovsky –

回答

0

您还没有联系的TABLE_BLOCK_LIST的ID与外键TABLE_BLOCKED_SMS

你可能需要修改你的代码看起来像下面的语句:

 value_TABLE_BLOCK_LIST.put(ORIGINATING_ADDRESS, originatingAddress); 
     long insertId = db.insert(TABLE_BLOCK_LIST, null, value_TABLE_BLOCK_LIST); 

     value_TABLE_BLOCKED_SMS.put(MESSAGE_BODY, messageBody); 
     value_TABLE_BLOCKED_SMS.put(FK_ID_BLOCK_LIST, insertId); 
     db.insert(TABLE_BLOCKED_SMS, null, value_TABLE_BLOCKED_SMS); 

另外一个音符在你的代码的语义:

我假设你有阻止列表,并且你想将阻止的消息链接到你的阻止列表。你在代码中做的是在TABLE_BLOCK_LIST表中创建一个单独的条目,但不确认是否存在相关条目。我建议在尝试在表格中插入新记录之前检查记录的存在。例如执行以下SQL第一:

Cursor c = db.rawQuery("SELECT "+ID_BLOCK_LIST+" FROM "+TABLE_BLOCK_LIST+" WHERE "+ORIGINATING_ADDRESS+"=?",new String[] {originatingAddress}); 
+0

也请告诉我如何从TABLE_BLOCK_LIST中删除数据以及通过TABLE_BLOCKED_SMS中的外键进行的所有引用。 @Pooya –

+0

我发布了我的删除代码,请看它@Pooya –

+0

我的删除代码无法从TABLE_BLOCKED_SMS删除外键引用数据请帮忙@Pooya –

0

value_TABLE_BLOCK_LIST.put(ORIGINATING_ADDRESS, originatingAddress); db.insert(TABLE_BLOCK_LIST, null, value_TABLE_BLOCK_LIST);

db.insert回报long id这是你插入的记录的主键。我猜你必须首先将该密钥作为外键值传递到value_TABLE_BLOCKED_SMS下的FK_ID_BLOCK_LIST密钥,然后才能将其插入TABLE_BLOCKED_SMS

而且我建议你来熟悉使用insertWithOnConflict()方法,而然后用简单insert()

+0

感谢您的帮助 –

+0

也请告诉我如何从TABLE_BLOCK_LIST中删除数据以及通过外键引用从TABLE_BLOCKED_SMS删除代码发布。@Maxim Berezovsky –