


/**
*
* 数据库元数据的定义 用于给 DatabaseHelper类使用
*
* 1.不能被继承 final
*
* 2.不能被创建 私有化构造函数
*
*
*/
public final class PetMetaData {
private PetMetaData() {
}
public static abstract class DogTable implements BaseColumns {
public static final String TABLE_NAME = "dog";
public static final String NAME ="name";
public static final String AGE = "age";
}
}



public class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_NAME = "pet.db";
private static int VERSION = 1;
private static final String CREATE_TABLE_DOG = "CREATE TABLE dog(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)";
private static final String DROP_TABLE_DOG ="DROP TABLE IF EXISTS dog";
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
/***
* 如果数据库表不存在,那么用调用该方法
*
*
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_DOG);
}
/***
* 数据库 升级或更新
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_TABLE_DOG);
db.execSQL(CREATE_TABLE_DOG);
}
}

/**
* 对数据库 增 删 改 查
*/
public class DataBaseAdapter {
private DatabaseHelper dbHelper;
public DataBaseAdapter(Context context) {
this.dbHelper = new DatabaseHelper(context);
}
/**
* 添加
*
* @param dog
*/
public void add(Dog dog) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(PetMetaData.DogTable.NAME, dog.getName());
values.put(PetMetaData.DogTable.AGE, dog.getAge());
db.insert(PetMetaData.DogTable.TABLE_NAME, null, values);
db.close();
}
/**
* 删除
*
* @param id
*/
public void delete(int id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String whereclause = PetMetaData.DogTable._ID + "=?";
String[] whereargs = {String.valueOf(id)};
db.delete(PetMetaData.DogTable.TABLE_NAME, whereclause, whereargs);
db.close();
}
/**
* 更新
*
* @param dog
*/
public void update(Dog dog) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(PetMetaData.DogTable.NAME, dog.getName());
values.put(PetMetaData.DogTable.AGE, dog.getAge());
String whereclause = PetMetaData.DogTable._ID + "=?";
String[] whereargs = {String.valueOf(dog.getId())};
db.update(PetMetaData.DogTable.TABLE_NAME, values, whereclause, whereargs);
db.close();
}
/**
* 根据id 查找 一个
*
* @param id
*/
public Dog findById(int id) {
SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {PetMetaData.DogTable._ID, PetMetaData.DogTable.NAME, PetMetaData.DogTable.AGE};
String selection = PetMetaData.DogTable._ID + "=?";
String[] selectionArgs = {String.valueOf(id)};
Cursor cursor = db.query(true, PetMetaData.DogTable.TABLE_NAME, columns, selection, selectionArgs, null, null, null, null);
Dog dog = null;
if (cursor.moveToNext()) {
dog = new Dog();
dog.setId(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable._ID)));
dog.setName(cursor.getString(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.NAME)));
dog.setAge(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.AGE)));
}
return dog;
}
/**
* 查找所有
*
* @return
*/
public ArrayList<Dog> findAll() {
SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {PetMetaData.DogTable._ID, PetMetaData.DogTable.NAME, PetMetaData.DogTable.AGE};
/**
* 参数:
* 1.是否去除重复记录
* 2.表名
* 3.要查询的列
* 4.查询条件
* 5.查询条件的值
* 6.分组条件
* 7.分组条件的值
* 8.排序
* 9.分页条件
*/
Cursor cursor = db.query(true, PetMetaData.DogTable.TABLE_NAME, columns, null, null, null, null, null, null);
ArrayList<Dog> dogs = new ArrayList<>();
Dog dog = null;
while (cursor.moveToNext()) {
dog = new Dog();
dog.setId(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable._ID)));
dog.setName(cursor.getString(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.NAME)));
dog.setAge(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.AGE)));
dogs.add(dog);
}
return dogs;
}
}


public class DataBaseAdapter {
private DatabaseHelper dbHelper;
public DataBaseAdapter(Context context) {
this.dbHelper = new DatabaseHelper(context);
}
/***
* 原生的sql 添加
*
* @param dog
*/
public void rawAdd(Dog dog) {
String sql = "insert into dog(name,age) values(?,?)";
Object[] args = {dog.getName(), dog.getAge()};
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL(sql, args);
db.close();
}
/**
* 原生 sql 删除
*
* @param id
*/
public void rawDelete(int id) {
String sql = "delete from dog where _id=?";
Object[] args = {id};
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL(sql, args);
db.close();
}
/***
* 原生sql 更新
*
* @param dog
*/
public void rawUpdate(Dog dog) {
String sql = "update dog set name =?,age=? where _id =?";
Object[] args = {dog.getName(), dog.getAge(), dog.getId()};
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL(sql, args);
db.close();
}
/**
* 原生 sql查找一个
* @param id
* @return
*/
public Dog rawFindById(int id) {
String sql = "select _id,name,age,from dog where _id =?";
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, new String[]{String.valueOf(id)});
Dog dog = null;
if (cursor.moveToNext()) {
dog = new Dog();
dog.setId(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable._ID)));
dog.setName(cursor.getString(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.NAME)));
dog.setAge(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.AGE)));
}
return dog;
}
/***
* 原生sql 查找所有
* @return
*/
public ArrayList<Dog> rawFindAll() {
String sql = "select _id,name,age,from dog";
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
ArrayList<Dog> dogs = new ArrayList<>();
Dog dog = null;
while (cursor.moveToNext()) {
dog = new Dog();
dog.setId(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable._ID)));
dog.setName(cursor.getString(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.NAME)));
dog.setAge(cursor.getInt(cursor.getColumnIndexOrThrow(PetMetaData.DogTable.AGE)));
dogs.add(dog);
}
return dogs;
}
}
/**
* sql 事务的操作
*/
public void transaction() {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction();
try {
db.execSQL("insert into dog(name,age) values('dang',4)");
db.execSQL("insert into dog(name,age) values('do',5)");
db.setTransactionSuccessful();
} finally {
db.endTransaction();
db.close();
}
}