创建DBOpenHelper类
DBOpenHelper.java(一定要继承SQLiteOpenHelper )
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context) {
/*
* 数据库文件默认创建在 <包>/databases/
* name要生成数据库名称
* factory游标工厂用null使用系统默认的游标工厂
* version数据库文件的版本号,不能为0
* */
super(context, "mydb.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO 数据库第一次被创建的时候调用
db.execSQL("CREATE TABLE person (id INTEGER PRIMARY KEY autoincrement, name VARCHAR(20))");//创建person表
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 数据库文件的版本号发生变更的时候调用
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");//往表中增加一列
}
}
创建数据库
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
dbOpenHelper.getWritableDatabase();//第一次调用时会创建数据库
保存
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();//对同一个dbOpenHelper实例有缓存
Person person = new Person();
person.setName("user");
//方法一
List<Object> para = new ArrayList<Object>();
para.add(person.getName());
db.execSQL("insert into person(name) values(?)", para.toArray());
//方法二
ContentValues contentValues = new ContentValues();
contentValues.put("name", person.getName());
/*第一个参数:表名
* 第二个参数:null空值字段,当contentValues为null时用到,可以传null或表中字段("id")
* 第三个参数:要保存的值
* */
db.insert("person", null, contentValues);
db.close();
删除
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//方法一
List<Object> para = new ArrayList<Object>();
para.add(1);
db.execSQL("delete from person where id=?", para.toArray());
//方法二
db.delete("person", "id=?", new String[]{"1"});//表名,条件,占位符的值
db.close();
事物
修改
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
Person person = new Person();
person.setId(5);
person.setName("yyyyy");
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//方法一
List<Object> para = new ArrayList<Object>();
para.add(person.getName());
para.add(person.getId());
db.execSQL("update person set name=? where id=?", para.toArray());
//方法二
ContentValues values = new ContentValues();
values.put("name", person.getName());
db.update("person", values, "id=?", new String[]{person.getId().toString()});//表名,更新的值,条件,条件中占位符的值
db.close();
查找
根据id查找
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
Person person = null;
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Long id=1l;
//方法一
Cursor cursor = db.rawQuery("select * from person where id=?", new String[]{id+""});
//方法二
/*
* 第一个参数:表名
* 第二个参数:要查找的字段名(如:new String[]{"id","name"}),如果传null将查全部
* 第三个参数:条件
* 第四个参数:条件中的值
* 第五个参数:查询语句中的groupBy没有传null
* 第六个参数:查询语句中的having没有传null
* 第七个参数:查询语句中的orderBy没有传null
* */
Cursor cursor = db.query("person", null, "id=?", new String[]{id+""}, null, null, null);
if(cursor.moveToFirst()){
String name = cursor.getString(cursor.getColumnIndex("name"));
person = new Person(id,name);
}
db.close();
Log.i(TAG, person.toString());
分页查找
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
List<Person> list = new ArrayList<Person>();
Person person = null;
int offser = 0;
int maxResult = 5;
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
//方法一
Cursor cursor = db.rawQuery("select * from person order by id asc limit ?,?", new String[]{offser+"",maxResult+""});
//方法二
/*
* 第一个参数:表名
* 第二个参数:要查找的字段名(如:new String[]{"id","name"}),如果传null将查全部
* 第三个参数:条件
* 第四个参数:条件中的值
* 第五个参数:查询语句中的groupBy没有传null
* 第六个参数:查询语句中的having没有传null
* 第七个参数:查询语句中的orderBy没有传null
* 第八个参数:limit
* */
cursor = db.query("person", null, null, null, null, null, "id asc", offser+","+maxResult);
while(cursor.moveToNext()){
person = new Person(cursor.getInt(cursor.getColumnIndex("id")), cursor.getString(cursor.getColumnIndex("name")));
list.add(person);
}
db.close();
for(Person p : list){
Log.i(TAG, p.toString());
}
获取数据记录数
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
//方法一
Cursor cursor = db.rawQuery("select COUNT(id) from person",new String[]{});
//方法二
cursor = db.query("person", new String[]{"COUNT(id)"}, null, null, null, null, null);
if(cursor.moveToFirst()){
return cursor.getLong(0);
}
事务
PersonService personService = new PersonService(getContext());
Person person = new Person();
person.setId(5);
person.setName("yyyyy");
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
List<Object> para = new ArrayList<Object>();
para.add(person.getName());
para.add(person.getId());
db.beginTransaction();//开启事务
try {
db.execSQL("update person set name=? where id=?", para.toArray());
db.setTransactionSuccessful();//设置事务的标志为True
} finally{
/*
* 结束事务,有两种情况:commit,rollback
* 事务的提交或回滚是由事务的标志决定的,如果事务的标志为True事务就提交,否则回滚
* 默认情况下事务的标志为false
* */
db.endTransaction();
}
db.close();
附件
Person.java
public class Person {
private Integer id;
private String name;
public Person() {
super();
}
public Person(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}
}