一、环境
- 安卓系统:4.2
- 操作系统:Win 8.1
- 工具:Android Studio
二、SQLite操作
- 新建一个辅助类继承自 SQLiteOpenHelper,来管理数据库的创建和版本的管理。要使用它必须实现它的onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int)方法。
onCreate:当数据库第一次被建立的时候被执行,例如创建表,初始化数据等。
onUpgrade:当数据库需要被更新的时候执行,例如删除久表,创建新表。
public class DBHelper extends SQLiteOpenHelper {
private Context context;
public static final int VERSION = 1;
public static final String CREATE_SCHEDULE = "create table schedule(" +
//primary key 将id列设为主键,autoincrement表示id列是自增长的
"id integer primary key autoincrement," +
"title text," +
"remark text," +
"date text," +
"starttime text," +
"endtime text," +
"istip text)";
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//在数据库创建时,创建表
sqLiteDatabase.execSQL(CREATE_SCHEDULE);
Log.v("DBHelper:", "create Database------------->");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
Log.v("DBHelper:", "create Database------------->");
}
}
- 新建一个对数据库进行操作的类(Schedule 是自定义的 model)
public class DBTool {
private final String TAG = "DBTools:";
private DBHelper dbHelper;
public DBTool(Context context){
dbHelper = new DBHelper(context,"schedule.db",null,1);
}
//根据 Map 里的查询条件查询记录
public List listByMap(Map params){
String sql = "select * from schedule where ";
Set<String> keySet = params.keySet();
for(String k : keySet){
sql += k + " = " + params.get(k) + " and ";
}
sql = sql.substring(0, sql.length()-5) + " order by starttime";
Log.v(TAG, sql);
List list = new ArrayList();
//得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//查询获得游标
Cursor cursor = db.rawQuery(sql, null);
//判断游标是否为空
if(cursor.moveToFirst()) {
//遍历游标
while(!cursor.isAfterLast()){
Schedule schedule = new Schedule();
//获得ID
schedule.id = cursor.getInt(cursor.getColumnIndex("id"));
//获得事件
schedule.title = cursor.getString(cursor.getColumnIndex("title"));
//获得备注
schedule.remark = cursor.getString(cursor.getColumnIndex("remark"));
//获得日期
schedule.date = cursor.getString(cursor.getColumnIndex("date"));
//获得开始时间
schedule.starttime = cursor.getString(cursor.getColumnIndex("starttime"));
//获得结束时间
schedule.endtime = cursor.getString(cursor.getColumnIndex("endtime"));
//获得是否提醒
schedule.istip = cursor.getString(cursor.getColumnIndex("istip"));
Log.v(TAG, schedule.id+"@");
//添加日程到列表
list.add(schedule);
cursor.moveToNext();
}
}
cursor.close();
db.close();
return list;
}
//根据对象 id 获取记录
public Schedule getById(int id){
Schedule schedule = new Schedule();
String sql = "select * from schedule where id = " + id;
//得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//查询获得游标
Cursor cursor = db.rawQuery(sql, null);
//判断游标是否为空
if (cursor.moveToFirst()) {
//游标获取第一个结果
cursor.move(0);
//获得ID
schedule.id = cursor.getInt(cursor.getColumnIndex("id"));
//获得事件
schedule.title = cursor.getString(cursor.getColumnIndex("title"));
//获得备注
schedule.remark = cursor.getString(cursor.getColumnIndex("remark"));
//获得日期
schedule.date = cursor.getString(cursor.getColumnIndex("date"));
//获得开始时间
schedule.starttime = cursor.getString(cursor.getColumnIndex("starttime"));
//获得结束时间
schedule.endtime = cursor.getString(cursor.getColumnIndex("endtime"));
//获得是否提醒
schedule.istip = cursor.getString(cursor.getColumnIndex("istip"));
}
cursor.close();
db.close();
return schedule;
}
//添加记录
public void add(Schedule schedule){
//得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//实例化常量值
ContentValues cValue = new ContentValues();
//添加事件
cValue.put("title", schedule.title);
//添加备注
cValue.put("remark", schedule.remark);
//添加日期
cValue.put("date", schedule.date);
//添加开始时间
cValue.put("starttime", schedule.starttime);
//添加结束时间
cValue.put("endtime", schedule.endtime);
//添加是否提醒
cValue.put("istip", schedule.istip);
//调用insert()方法插入数据
long id = db.insert("schedule",null,cValue);
Log.v(TAG, ""+id);
db.close();
}
//删除记录
private void delById(Schedule schedule){
//得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//删除SQL语句
String sql = "delete from schedule where id = "+schedule.id;
//执行SQL语句
db.execSQL(sql);
db.close();
}
//修改记录
public void updateById(Schedule schedule){
//得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//修改SQL语句
String sql = "update schedule set " +
"title = " + schedule.title + " " +
"remark = " + schedule.remark + " " +
"date = " + schedule.date + " " +
"starttime = " + schedule.starttime + " " +
"endtime = " + schedule.endtime + " " +
"istip = " + schedule.istip + " " +
"where " +
"id = "+schedule.id;
//执行SQL语句
db.execSQL(sql);
db.close();
}
}
- Activity 调用 DBTool
三、开发时查看 SQLite 的数据
- 虚拟机必须开启。
- 打开命令符窗口,右击“开始菜单”–》点击“运行”–》输入“cmd”。
- 打开 adb 工具,在命令符窗口输入“adb shell”。
- 进入项目的数据库文件夹,在 adb shell 下,输入“cd data/data/项目的包名/databases”。
- 进入数据库,在 adb shell 下,输入“sqlite3 数据库名”。
- 利用 sql 语句对数据库进行操作。