sqlite:轻量级的关系型数据库,android提供sqliteOpenHelper帮助类,方便对数据库创建和升级。抽象方法onCreate()和 onUpgrade(),创建和升级
数据库逻辑。
实例方法getReadableDatabase() 和
getWritableDatabase(),创建或打开现有数据库。
public@H_404_8@ class@H_404_8@ MyDatabaseHelper@H_404_8@ extends@H_404_8@ sqliteOpenHelper@H_404_8@ {@H_404_8@
public@H_404_8@ static@H_404_8@ final@H_404_8@ String CREATE_BOOK = "create table Book ("@H_404_8@
+ "id integer primary key autoincrement,"@H_404_8@
+ "author text,"@H_404_8@
+ "price real,"@H_404_8@
+ "pages integer,"@H_404_8@
+ "name text)"@H_404_8@;
public@H_404_8@ static@H_404_8@ final@H_404_8@ String CREATE_CATEGORY = "create table Category ("@H_404_8@
+ "id integer primary key autoincrement,"@H_404_8@
+ "category_name text,"@H_404_8@
+ "category_code integer)"@H_404_8@;
private@H_404_8@ Context mContext;
//重写构造方法:Context,数据库名,查询数据时返回自定义Cursor,数据库版本号@H_404_8@
public@H_404_8@ MyDatabaseHelper@H_404_8@(Context context,String name,CursorFactory factory,int@H_404_8@ version) {
super@H_404_8@(context,name,factory,version);
mContext = context;
}
@Override@H_404_8@
public@H_404_8@ void@H_404_8@ onCreate@H_404_8@(sqliteDatabase db) {
db.execsql(CREATE_BOOK);
db.execsql(CREATE_CATEGORY);
Toast.makeText(mContext,"Create succeeded"@H_404_8@,Toast.LENGTH_SHORT).show();
}
@Override@H_404_8@
public@H_404_8@ void@H_404_8@ onUpgrade@H_404_8@(sqliteDatabase db,int@H_404_8@ oldVersion,int@H_404_8@ newVersion) {
db.execsql("drop table if exists Book"@H_404_8@);
db.execsql("drop table if exists Category"@H_404_8@);
onCreate(db);
}
}
1、创建数据库:
dbHelper = new@H_404_8@ MyDatabaseHelper(this@H_404_8@,"BookStore.db"@H_404_8@,null@H_404_8@,2@H_404_8@);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new@H_404_8@ OnClickListener() {
@Override@H_404_8@
public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
dbHelper.getWritableDatabase();
}
});
生成BookStore.db数据库
使用sqliteSpy软件打开,可以看到Book表,里面有5种数据类型
2、添加数据
Button addData = (Button) findViewById(R.id@H_404_8@.add@H_404_8@_data);@H_404_8@
addData.setOnClickListener@H_404_8@(new OnClickListener() {
@Override
public void onClick(View v) {
sqliteDatabase db = dbHelper.getWritableDatabase@H_404_8@();@H_404_8@
ContentValues values = new ContentValues();@H_404_8@
values.put@H_404_8@("name"@H_404_8@,"The Da Vinci Code"@H_404_8@);@H_404_8@
values.put@H_404_8@("author"@H_404_8@,"Dan Brown"@H_404_8@);@H_404_8@
values.put@H_404_8@("pages"@H_404_8@,454@H_404_8@);@H_404_8@
values.put@H_404_8@("price"@H_404_8@,16.96@H_404_8@);@H_404_8@
db.insert@H_404_8@("Book"@H_404_8@,null,values);@H_404_8@
values.clear@H_404_8@();@H_404_8@
values.put@H_404_8@("name"@H_404_8@,"The Lost Symbol"@H_404_8@);@H_404_8@
values.put@H_404_8@("author"@H_404_8@,510@H_404_8@);@H_404_8@
values.put@H_404_8@("price"@H_404_8@,19.95@H_404_8@);@H_404_8@
db.insert@H_404_8@("Book"@H_404_8@,values);@H_404_8@
}
});@H_404_8@
可以看到数据库里面的数据
3、更新数据
Button updateData = (Button) findViewById(R.id.update_data);
updateData.setOnClickListener(new@H_404_8@ OnClickListener() {
@Override@H_404_8@
public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
sqliteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new@H_404_8@ ContentValues();
values.put("price"@H_404_8@,10.99@H_404_8@);
db.update("Book"@H_404_8@,values,"name = ?"@H_404_8@,new@H_404_8@ String[] { "The Da Vinci Code"@H_404_8@ });
}
});
更新数据,可以看到价格变成了10.99
4、删除数据
Button deleteButton = (Button) findViewById(R.id.delete_data);
deleteButton.setOnClickListener(new@H_404_8@ OnClickListener() {
@Override@H_404_8@
public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
sqliteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book"@H_404_8@,"pages > ?"@H_404_8@,new@H_404_8@ String[] { "500"@H_404_8@ });
}
});
删除数据,可以看到name数据The Lost Symbol被删除,其他项也被删除:
5、遍历数据
Button queryButton = (Button) findViewById(R.id@H_404_8@.query@H_404_8@_data);@H_404_8@
queryButton.setOnClickListener@H_404_8@(new OnClickListener() {
@Override
public void onClick(View v) {
sqliteDatabase db = dbHelper.getWritableDatabase@H_404_8@();@H_404_8@
Cursor cursor = db.query@H_404_8@("Book"@H_404_8@,null);@H_404_8@
if (cursor.moveToFirst@H_404_8@()) {
do {
String name = cursor.getString@H_404_8@(cursor
.getColumnIndex@H_404_8@("name"@H_404_8@));@H_404_8@
String author = cursor.getString@H_404_8@(cursor
.getColumnIndex@H_404_8@("author"@H_404_8@));@H_404_8@
int pages = cursor.getInt@H_404_8@(cursor
.getColumnIndex@H_404_8@("pages"@H_404_8@));@H_404_8@
double price = cursor.getDouble@H_404_8@(cursor
.getColumnIndex@H_404_8@("price"@H_404_8@));@H_404_8@
Log.d@H_404_8@("MainActivity"@H_404_8@,"book name is "@H_404_8@ + name);@H_404_8@
Log.d@H_404_8@("MainActivity"@H_404_8@,"book author is "@H_404_8@ + author);@H_404_8@
Log.d@H_404_8@("MainActivity"@H_404_8@,"book pages is "@H_404_8@ + pages);@H_404_8@
Log.d@H_404_8@("MainActivity"@H_404_8@,"book price is "@H_404_8@ + price);@H_404_8@
} while (cursor.moveToNext@H_404_8@());@H_404_8@
}
cursor.close@H_404_8@();@H_404_8@
}
});@H_404_8@
设置断点,debug模式下,单击query按键,运行到断点处,可以在watch窗口看到各个变量的数据:
6、代替数据
Button replaceData = (Button) findViewById(R.id.replace_data);
replaceData.setOnClickListener(new@H_404_8@ OnClickListener() {
@Override@H_404_8@
public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
sqliteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction();
try@H_404_8@ {
db.delete("Book"@H_404_8@,null@H_404_8@);
// if (true) {@H_404_8@
// throw new NullPointerException();@H_404_8@
// }@H_404_8@
ContentValues values = new@H_404_8@ ContentValues();
values.put("name"@H_404_8@,"Game of Thrones"@H_404_8@);
values.put("author"@H_404_8@,"George Martin"@H_404_8@);
values.put("pages"@H_404_8@,720@H_404_8@);
values.put("price"@H_404_8@,20.85@H_404_8@);
db.insert("Book"@H_404_8@,values);
db.setTransactionSuccessful();
} catch@H_404_8@ (Exception e) {
e.printStackTrace();
} finally@H_404_8@ {
db.endTransaction();
}
}
});
可以看到name数据被代替: