安卓提供了SQLite数据库,可以用来存储更多的数据。通过继承SQLiteOpenHelper类来操作数据库。
public class MyDatabaseHelper extends SQLiteOpenHelper
然后实现它的三个方法,构造方法,onCreate()方法,onUpgrade()方法。
我们可以在onCreate()方法执行数据库的操作,例如:
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table Book("
+"id Integer primary key autoincrement,"
+"author text,"
+"price real,"
+"pages integer,"
+"name text,"
+"category_id integer)");
}
当涉及版本升级时,我们使用onUpgrade()方法,同时在这里强烈建议配合switch语句来控制版本的更新操作,例如:
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
switch(i){
case 1:
sqLiteDatabase.execSQL("alter table Book add column category_id integer");
default:
}
}
注意:在这里的switch是没有break语句的,这样能使版本变化时完成所有需要的更新。
我们的所有数据库操作语句都是在这个类里实现的,通过实例化这个MyDatabaseHelper类,我们可以方法的使用它的方法来执行数据库的操作,例如:
//实例化MyDatabaseHelper
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,10);
//设置创建表按钮
Button createDBbtn = (Button)findViewById(R.id.btn);
createDBbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//使用getWritableDatabase()获取数据库可操作
myDatabaseHelper.getWritableDatabase();
}
});
//添加数据按钮
Button addbtn = (Button)findViewById(R.id.add_btn);
addbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//使用SQLiteDatabase对象来执行语句,需要三个参数,第一个为表名,第二个参数可选,可以为null,第三个为数据操作,通过contentValues完成
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name","thinking in android");
contentValues.put("author","Mr. Zhang");
contentValues.put("pages",0);
contentValues.put("price",0.0);
db.insert("Book", null, contentValues);
contentValues.clear();
contentValues.put("name", "The Lost Symbol");
contentValues.put("author", "Dan Brown");
contentValues.put("pages", 510);
contentValues.put("price", 19.95);
db.insert("Book", null, contentValues);
}
});
//更新数据库表按钮
Button updbtn = (Button)findViewById(R.id.update_btn);
updbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("price",10.0);
db.update("Book", contentValues, "name = ?", new String[]{"thinking in android"});
}
});
//数据数据库表中数据按钮
Button delbtn = (Button)findViewById(R.id.del_btn);
delbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
db.delete("Book", "name = ?", new String[]{"The Lost Symbol"});
}
});
//查询数据库按钮,参数很多,这里只用了一个参数
Button querybtn = (Button)findViewById(R.id.query_btn);
querybtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
Cursor cursor = db.query("Book",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
Float price = cursor.getFloat(cursor.getColumnIndex("price"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
Log.d("MainActivity", "book name is " + name);
Log.d("MainActivity", "book author is " + author);
Log.d("MainActivity", "book pages is " + pages);
Log.d("MainActivity", "book price is " + price);
}while(cursor.moveToNext());
}
cursor.close();
}
});
//替换数据按钮,这里要结合数据库事务执行
Button replacebtn = (Button)findViewById(R.id.replace_btn);
replacebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
//开始事务
db.beginTransaction();
try{
db.delete("Book", null, null);
ContentValues contentValues = new ContentValues();
contentValues.put("name","Android develop");
contentValues.put("author","Mr. Android");
contentValues.put("price",100.0);
contentValues.put("pages",572);
db.insert("Book",null,contentValues);
//事务成功执行
db.setTransactionSuccessful();
}catch (Exception e){
e.printStackTrace();
}finally{
//事务结
db.endTransaction();
}
}
});
除了使用SQLiteHelper提供的方法,也可以直接用SQL语法来执行数据库操作哦。