Android内置了数据库
一、 数据库方法介绍
- 使用数据库的时候要新建一个帮助类继承SQLiteOpenHelper类,因为SQLiteOpenHelper是一个抽象类;
- 实现SQLiteOpenHelper的两个方法onCreate()和onUpgrade(),其中onCreate()用来创建数据库,onUpgrade()用来更新数据库;
- SQLiteOpenHelper里有两个实例方法getReadableDatabase()和getWritableDataBase()。第一个方法当数据库不可写入的时候getReadableDatabase()返回的对象只以只读的方式打开数据库,而getWritableDataBase()会出现异常;
- 有两个构造方法可以重写,一般选少参数的即可,第一个参数的Context,第二个是自己定义的数据库名,第三个是Curse(一般都是null),第四个是版本号(第一次的时候是个大于0的数);
- 生成的文件放在/data/data/< packagename>database/下;
二、 数据库的使用
- 要使用的语句是SQLite的语句,例:
create table Book(
id integer primary key autoincrement,
auto text,
price real,
pages integer,
name text
)
- 新建一个帮助类
public class MyHelper extends SQLiteOpenHelper{
public static String BOOK="create table book(" +
"id integer primary key autoincrement," +
"auto text," +
"price real," +
"pages integer," +
"name text)";
private Context mContext;
public MyHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(BOOK);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
三、 数据库的升级
- 调用onUpgrade(),其中有三个参数,第一个是数据库对象,第二个是旧版本号,第三个是新版本号,一般新版本号要大于旧版本号;
- 如果原本有一个表了就会报错,所以可以调用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(BOOK);
db.execSQL(cate);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
四 增删改查
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.create:
dbMyhelpers.getReadableDatabase();
break;
case R.id.updateAll:
dbMyhelpers.getReadableDatabase();
break;
case R.id.add:
SQLiteDatabase db1 = dbMyhelpers.getReadableDatabase();
db1.beginTransaction();//开启事务
try {
if (true) {
throw new NullPointerException();
}
@SuppressWarnings("unused")
ContentValues values1 = new ContentValues();
values1.put("name", "The DA");
values1.put("autor", "Dan Brown");
values1.put("price",454);
values1.put("price", 16.95);
db1.insert("Book", null, values1);
db1.setTransactionSuccessful();//事务开启启动成功
break;
} catch (Exception e) {
// TODO: handle exception
}
case R.id.delet:
SQLiteDatabase db2 = dbMyhelpers.getReadableDatabase();
db2.delete("BOOK", "pages>?", new String[]{"500"});
break;
case R.id.change:
SQLiteDatabase db3 = dbMyhelpers.getReadableDatabase();
ContentValues values3 = new ContentValues();
values3.put("price", 10.99);
db3.update("BOOK", values3, "name=?", new String[]{"code"});
break;
case R.id.search:
SQLiteDatabase db4 = dbMyhelpers.getReadableDatabase();
Cursor cursor = db4.query("BOOK", null,null,null,null,null,null);
if (cursor.moveToNext()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
} while (cursor.moveToNext());
}cursor.close();
break;
default:
break;
}
}