SQLite 是一个轻量级而又快速的数据库。
SQLite 创建
在Android 中可以继承SQLiteOpenHelper 类来操作SQLite 数据库。
在Android 中,创建的数据库都是在:/data/data/<packageName>/databases/<dataBaseName>
。
1. 继承SQLiteOpenHelper
继承SQLiteOpenHelper 类,重写一个构造函数,OnCreate 函数和OnUpgrade 函数。
DBhelper.java
package cn.met0.android.chapter4;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
String user = "create table user(id integer primary key,username text,password text)";
String info = "create table info(id integer primary key,str text)";
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(user);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (newVersion) {
case 2:
db.execSQL(info);
break;
default:
break;
}
}
}
DBHelper(Context, String, CursorFactory, int)
用来获取数据库操作对象,Context 为一个Activity对象、String数据库名称、CursorFactory 为null ,int 为版本号。
onCreate(SQLiteDatabase db)
当创建DBhelp对象时,如果传入的name(数据库名称)不存在时,则执行这个方法,通常为第一次初始化表结构。
onUpgrade(SQLiteDatabase , int , int )
当创建DBhelp对象时,如果数据库已存在,并且传入的版本号不同,则会执行这个方法,通常用来更新表结构。
2. 开始创建
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DBHelper db = new DBHelper(this, "user.db", null, 1);
SQLiteDatabase sql = db.getWritableDatabase();
sql.execSQL("insert into user (id,username,password) values (1,'admin','123456')");
}
插入数据
插入数据除了使用sql 语句外,还可以有更简单的方式。
插入数据
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("id", 2);
value.put("username", "tom");
sql.insert("user", null, value);
ContentValues
对象是一个存储一条记录的对象
sql.insert("user", null, value);
Param | Context |
---|---|
“user” | 操作的表名 |
null | 默认为null |
value | 插入的数据 |
更新数据
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("username", "jack");
value.put("password", "abcdef");
sql.update("user", value, "username = ?", new String[]{"tom"});
ContentValues
对象为要更新的内容
sql.update("user", value, "username = ?", new String[]{"tom"});
Param | Context |
---|---|
“user” | 操作的表名 |
value | 要更新成的内容 |
“username = ?” | 更新条件 |
new String[]{“tom”} | 更新条件参数 |
删除数据
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
sql.delete("user", "username = ?", new String[]{"tom"});
sql.delete("user", "username = ?", new String[]{"tom"});
Param | Context |
---|---|
“user” | 操作的表名 |
“username = ?” | 删除数据的条件 |
new String[]{“tom”} | 条件参数 |
查询数据
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
sql.query("user", null, null, null, null, null, null);
事务
DBHelper db = new DBHelper(this, "user.db", null, 2);
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("username", "tom");
value.put("password", "123456");
try{
sql.beginTransaction();
sql.delete("user", "username = ?", new String[]{});
sql.insert("user", null, value);
sql.setTransactionSuccessful();
}catch (Exception e){
sql.endTransaction();
}finally{
sql.close();
}
sql.beginTransaction();
开启事务
sql.setTransactionSuccessful();
提交事务
sql.endTransaction();
回滚事务
注意
在重写OnCreate 方法时,不能写插入sql语句,否则将会创建不成功。
除非创建对象后,也执行插入语句。