Android SQLite 使用外键约束

               外键约束是很常用的一个数据约束方式。但是使用起来并不是那么简单。定义外键约束的方法,使用FOREIGN KEY,可以用于单列或者多列。FOREIGN KEY和REFERNCES经常联合使用。References表示该列引用哪个表的哪个列作为外键。单列时,FOREIGN KEY可以省略。

            在Android2.1以前的版本使用的SQLite版本是3.5.9,而SQLite在3.6.19版本才开始支持外键约束。在Android的2.2版本中使用了版本号3.6.22的SQLite,但是为了兼容以前的程序,默认并没有启用该功能。如果要启用该功能,就在SQLiteOpenHelper的onOpen方法里加入如下方法: 

           

	@Override
		public void onOpen(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			super.onOpen(db);
			if(!db.isReadOnly()) { // Enable foreign key constraints
				db.execSQL("PRAGMA foreign_keys=ON;"); 
			}
		}

              然后就可以使用外键约束了。demo代码如下:

              

private static final String TABLE_THEME = "themeTable";
	private static final String THEME_TABLE_ID = "_id";
	private static final String THEME_TABLE_THEME_ID = "tid";
	private static final String THEME_TABLE_NAME = "name";
	private static final String THEME_TABLE_WATERMARK_ID = "wid";
	private static final String THEME_TABLE_MUSIC_ID = "mid";
	private static final String THEME_TABLE_ICON_PATH = "icon_path";//icon 路径
	private static final String THEME_TABLE_ICON_URL = "icon_url";//icon url
	
	private static final String TABLE_WATERMARK = "watermarkTable";
	private static final String WATERMARK_TABLE_ID = "_id";
	private static final String WATERMARK_TABLE_WATERMARK_ID = "wid";
	
	
	private static final String TABLE_MUSIC = "watermarkTable";
	private static final String MUSIC_TABLE_ID = "_id";
	private static final String MUSIC_TABLE_MUSIC_ID = "mid";
            

             

@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub

			//db.execSQL(CREATE_TABLE_CONTACT);
			
			db.execSQL( "CREATE TABLE IF NOT EXISTS "+
					    TABLE_WATERMARK+
			            "("+
			                WATERMARK_TABLE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + // rowID
			                WATERMARK_TABLE_WATERMARK_ID + "TEXT ,"+ //水印id
							
					    ")"
					   );
			db.execSQL( "CREATE TABLE IF NOT EXISTS "+
					    TABLE_MUSIC+
			            "("+
			                MUSIC_TABLE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + // rowID
			                MUSIC_TABLE_MUSIC_ID + "TEXT ,"+ //音乐id
							
					    ")"
					   );
			db.execSQL("CREATE TABLE IF NOT EXISTS "+
					    TABLE_THEME+
					    "("+
					    THEME_TABLE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + // rowID
						THEME_TABLE_THEME_ID + "TEXT ,"+ //主题id
						THEME_TABLE_NAME + " TEXT ," + // 主题名称
			            THEME_TABLE_WATERMARK_ID + " TEXT," + // 主题包含的水印id
			            THEME_TABLE_MUSIC_ID + " TEXT," + // 主题包含的配乐id
			            THEME_TABLE_ICON_URL + " TEXT ," + // 主题icon的url
			            THEME_TABLE_ICON_PATH + " TEXT " +   // 主题icon的下载路径
					    "FOREIGN KEY ("+THEME_TABLE_WATERMARK_ID+") REFERENCES"+TABLE_WATERMARK+" ("+WATERMARK_TABLE_WATERMARK_ID+")" +
					    "FOREIGN KEY ("+THEME_TABLE_MUSIC_ID+") REFERENCES"+TABLE_MUSIC+" ("+MUSIC_TABLE_MUSIC_ID+")" +
					    ");"
					  );
		}

           

      


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值