安卓SQLite数据库

学习安卓的时候难免会想想,安卓的数据库跟一般的java web有啥区别,然后课后回来查了查资料学习了一下,发现SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID 事务。

安卓创建数据库流程概述

Android专门提供了一个 SQLiteOpenHelper 帮 助类,借助这个类就可以非常简单地对数据库进行创建。既然有好东西可以直接使用。

知道 SQLiteOpenHelper 是一个抽象类,这表示如果我们想要使用它, 就需要创建一个自己的类去继承。SQLiteOpenHelper 中有两个抽象方法,分别是 onCreate()和 onUpgrade(),我们必须在自己的类里面重写这两个方法,然后分别在这两 个方法中去实现创建数据库。

SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。

在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的

 OnCreate中(SQLiteDatabase db) :创建数据库时调用

 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):作出修改数据库调用。

 创建数据库

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
    );
  //Inserts pre-defined departments
  InsertDepts(db); 
 }
 
SQL使用
db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
    colDeptName+ " TEXT)");
 
更新值(update)
 执行 db.execSQL或者执行 db.update
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())});  
  }
 
删除行
 执行 db.execSQL或执行 db.delete方法
public void DeleteEmp(Employee emp)
  {
   SQLiteDatabase db=this.getWritableDatabase();
   db.delete(employeeTable,colID+"=?", new String [] {String.valueOf(emp.getID())});
   db.close();
  }
查询
执行 db.rawQuery 或执行 db.query
Cursor getAllDepts()
  {
   SQLiteDatabase db=this.getReadableDatabase();
   Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,
    "+colDeptName+" from "+deptTable,new String [] {});
    
   return cur;
   }

猜你喜欢

转载自blog.csdn.net/qq_39400251/article/details/80772163