操作原理:
Android系统中的数据库,以文件的形式存在。
同其他数据库一样,SQLiteDatabase数据库简单来说也是对增删该查操作。
---------------------------------------------------------------
如何清除应用程序数据库 ?
将应用程序卸载
sqlite数据库需要有一个_id主键,如果不是在查询的时候可以使用select id as _id.... ,这样获取的cursor结果集中id就变为了指定的别名_id。
数据库在查询时,query第二个参数column数据指定为null表示查询所有记录。
在程序中为了兼容经常要用到已过时的方法,当时高版本运行时会有警告提示,可以通过Build.VERSON.SDK_INT获取到版本,
在根据不同版本,使用不同方法。
SQL语句回顾
Desc降序 select id form person desc
Asc升序
Cursor
数据库游标类似一个指针,初始位置是指向第一条记录的上一行,调用moveToNext方法时会移动到第一条记录的位置。
代码实现:
1.创建数据库
2.对数据库进行增删改查
创建数据库
a.创建一个类继承SQLiteOpenHelper类
b.创建定义类的对象,调用getReadableDatabase或者getWriteableDatabase,创建数据库成功。
package com.itheima.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class PersonOpenDBHelper extends SQLiteOpenHelper {
/**
* 构造函数
* @param context 上下文提供信息和环境
* @param name 数据库文件名称
* @param factory 游标工厂,如果为null则默认使用系统提供
* @param version 数据库版本,从1开始,如果小于1会抛出异常
*/
public PersonOpenDBHelper(Context context) {
super(context, "person.db", null, 1);
}
/**
* 当数据库第一次被创建的时候调用
* 适合在这里定义表结构
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(id integer primary key autoincrement,name varchar(20),phone varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
package com.itheima.db;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
/**
* 创建数据库并实现增删改成功能
* android创建数据库:
* 1.创建一个类继承SQLiteOpenHelper类
* 2.创建定义类的对象,调用getReadableDatabase或者getWriteableDatabase,创建数据库成功。
* @author hzd
*
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建SQLiteOpenHelper对象,获取一个可读或可写的数据库
PersonOpenDBHelper helper = new PersonOpenDBHelper(this);
helper.getWritableDatabase();
}
}
对数据库进行增删改查
package com.itheima.db.dao;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.itheima.db.PersonOpenDBHelper;
public class PersonDao {
private PersonOpenDBHelper helper;
public PersonDao(Context context) {
helper = new PersonOpenDBHelper(context);
}
/**
* 添加一条记录
* @param name 名字
* @param phone 电话
*/
public void add(String name,String phone) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into person(name,phone) values(?,?)",new Object[]{name,phone});
}
/**
* 根据用户名查找一条记录
* @param name 名字
* @param phone 电话
*/
public int find(String name) {
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery("select id from person where id = ?",new String[]{name});
int id = -1;
if(cursor.moveToFirst()) {
id = cursor.getInt(0);
}
return id;
}
/**
* 修改一条记录
* @param name 名字
* @param phone 电话
*/
public void update(String phone,int id) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update person set phone=?where id =?",new Object[]{phone,id});
}
/**
* 添加一条记录,根据id
* @param name 名字
*
*/
public void delete(int id) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from person where id = ?",new Object[]{id});
}
}