Android[高级教程] Android数据库SQLite表内设置外键
来源:互联网 发布:java聚类分析 编辑:程序博客网 时间:2024/05/21 11:30
转:http://blog.csdn.net/kangx6/article/details/7003659
介绍:
安卓默认的数据是SQLite,但SQLite3.6.19之前是不支持外键的,如果有两张表需要关联,用外键是最省事的,但不支持的话怎么办呢?这里就有一个解决办法,就是用事务将两张表关联起来,并且最后生成一张视图。
现有两张表
Employees
Dept
视图
ViewEmps
:显示雇员信息和他所在的部门
创建数据库
自定义一个辅助类继承SQLiteOpenHelper类
1.onCreate(SQLiteDatabase db)
: 当数据库被创建的时候,能够生成表,并创建视图跟触发器。2.
onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion)
: 更新的时候可以删除表和创建新的表。代码如下:构造器
- public class DatabaseHelper extends SQLiteOpenHelper {
- static final String dbName="demoDB";
- static final String employeeTable="Employees";
- static final String colID="EmployeeID";
- static final String colName="EmployeeName";
- static final String colAge="Age";
- static final String colDept="Dept";
- static final String deptTable="Dept";
- static final String colDeptID="DeptID";
- static final String colDeptName="DeptName";
- static final String viewEmps="ViewEmps";
- public DatabaseHelper(Context context) {
- super(context, dbName, null,33);
- }
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
- colDeptName+ " TEXT)");
- db.execSQL("CREATE TABLE "+employeeTable+"
- ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
- colName+" TEXT, "+colAge+" Integer, "+colDept+"
- INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES
- "+deptTable+" ("+colDeptID+"));");
- //创建触发器
- db.execSQL("CREATE TRIGGER fk_empdept_deptid " +
- " BEFORE INSERT "+
- " ON "+employeeTable+
- " FOR EACH ROW BEGIN"+
- " SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+"
- WHERE "+colDeptID+"=new."+colDept+" ) IS NULL)"+
- " THEN RAISE (ABORT,'Foreign Key Violation') END;"+
- " END;");
- //创建视图
- db.execSQL("CREATE VIEW "+viewEmps+
- " AS SELECT "+employeeTable+"."+colID+" AS _id,"+
- " "+employeeTable+"."+colName+","+
- " "+employeeTable+"."+colAge+","+
- " "+deptTable+"."+colDeptName+""+
- " FROM "+employeeTable+" JOIN "+deptTable+
- " ON "+employeeTable+"."+colDept+" ="+deptTable+"."+colDeptID
- );
- }
更新库中的表
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- db.execSQL("DROP TABLE IF EXISTS "+employeeTable);
- db.execSQL("DROP TABLE IF EXISTS "+deptTable);
- db.execSQL("DROP TRIGGER IF EXISTS fk_empdept_deptid");
- db.execSQL("DROP VIEW IF EXISTS "+viewEmps);
- onCreate(db);
- }
加入数据
- SQLiteDatabase db=this.getWritableDatabase();
- ContentValues cv=new ContentValues();
- cv.put(colDeptID, 1);
- cv.put(colDeptName, "Sales");
- db.insert(deptTable, colDeptID, cv);
- cv.put(colDeptID, 2);
- cv.put(colDeptName, "IT");
- db.insert(deptTable, colDeptID, cv);
- db.close();
更新数据
- public int UpdateEmp(Employee emp)
- {
- SQLiteDatabase db=this.getWritableDatabase();
- ContentValues cv=new ContentValues();
- cv.put(colName, emp.getName());
- cv.put(colAge, emp.getAge());
- cv.put(colDept, emp.getDept());
- return db.update(employeeTable, cv, colID+"=?",
- new String []{String.valueOf(emp.getID())});
- }
删除数据
- public void DeleteEmp(Employee emp)
- {
- SQLiteDatabase db=this.getWritableDatabase();
- db.delete(employeeTable,colID+"=?", new String [] {String.valueOf(emp.getID())});
- db.close();
- }
取得所有部门信息
- Cursor getAllDepts()
- {
- SQLiteDatabase db=this.getReadableDatabase();
- Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,
- "+colDeptName+" from "+deptTable,new String [] {});
- return cur;
- }
取得部门内雇员信息
- public Cursor getEmpByDept(String Dept)
- {
- SQLiteDatabase db=this.getReadableDatabase();
- String [] columns=new String[]{"_id",colName,colAge,colDeptName};
- Cursor c=db.query(viewEmps, columns, colDeptName+"=?",
- new String[]{Dept}, null, null, null);
- return c;
- }
取得部门ID
- public int GetDeptID(String Dept)
- {
- SQLiteDatabase db=this.getReadableDatabase();
- Cursor c=db.query(deptTable, new String[]{colDeptID+" as _id",colDeptName},
- colDeptName+"=?", new String[]{Dept}, null, null, null);
- //Cursor c=db.rawQuery("SELECT "+colDeptID+" as _id FROM "+deptTable+"
- //WHERE "+colDeptName+"=?", new String []{Dept});
- c.moveToFirst();
- return c.getInt(c.getColumnIndex("_id"));
- }
原网页:http://www.codeproject.com/KB/android/AndroidSQLite.aspx#
0 0
- Android[高级教程] Android数据库SQLite表内设置外键
- Android[高级教程] Android数据库SQLite表内设置外键
- Android[高级教程] Android数据库SQLite表内设置外键
- Android数据库SQLite表内设置外键
- Android数据库SQLite表内设置外键
- Android SQLite数据库—高级语法
- Android SQLite 开发教程(3): 创建数据库
- android开发如何使用SQLite数据库教程
- hjr教程-Android(二):Sqlite数据库
- hjr教程-Android(二):Sqlite数据库
- android典型代码系列(二)------sqlite数据库操作高级
- Android数据库 SQLite数据库
- android sqlite 简明教程
- Android SQLite使用教程
- Android Sqlite synchronous设置
- Android SQLite 开发教程(4): 读写数据库操作
- Android SQLite 开发教程(5): 导出数据库到XML 文件
- Android开发SQLite轻量级数据库增删改查教程
- 网站优化过程中,如何减少企业优化成本?
- 测试
- android设置系统默认语言
- ios下打开相机遇到的闪退问题 (Snapshotting a view that has not been rendered results in an empty snapshot.)
- “>/dev/null 2>&1” 详解
- Android[高级教程] Android数据库SQLite表内设置外键
- spring mvc开发入门实例demo源代码下载,很适合新手入门学习用。
- EffictiveC++的50条建议
- 如何利用“场景应用”点燃用户真实需求?
- 51 js-unit
- iOS开发之私有API No.1 私有API的查找和生成
- jpg转换成pdf应该怎么做
- Hive函数大全(二)
- fsminit.cpp