学习安卓的时候难免会想想,安卓的数据库跟一般的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;
}