android学习笔记(2)
2015-08-31 09:14
489 查看
17. SQLite数据库
//分页语句跟mysql类似
select * from student limit 每页显示数*(页数-1),每页显示数
//分页
public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context) {
super(context, "itcast.db", null, 2);//<包>/databases/
}
@Override
public void onCreate(SQLiteDatabase db) {//是在数据库每一次被创建的时候调用的
db.execSQL("CREATE TABLE person(personid integer primary key autoincrement, name varchar(20), phone VARCHAR(12) NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD amount integer");
}
}
//创建测试
public void testCreateDB() throws Exception{
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
dbOpenHelper.getWritableDatabase();
}
/**
* 添加记录
* @param person
*/
public void save(Person person){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("insert into person(name, phone, amount) values(?,?,?)",
new Object[]{person.getName(), person.getPhone(), person.getAmount()});
}
getWritableDatabase()方法在数据库存储空间满了时报错
getReadableDatabase()方法在getWritableDatabase()报错的时调用,只读出数据。
/**
* 查询记录
* @param id 记录ID
* @return
*/
public Person find(Integer id){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()});
if(cursor.moveToFirst()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
int amount = cursor.getInt(cursor.getColumnIndex("amount"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
return new Person(personid, name, phone, amount);
}
cursor.close();
return null;
}
/**
* 分页获取记录
* @param offset 跳过前面多少条记录
* @param maxResult 每页获取多少条记录
* @return
*/
public List<Person> getScrollData(int offset, int maxResult){
List<Person> persons = new ArrayList<Person>();
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?",
new String[]{String.valueOf(offset), String.valueOf(maxResult)});
while(cursor.moveToNext()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
int amount = cursor.getInt(cursor.getColumnIndex("amount"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
persons.add(new Person(personid, name, phone, amount));
}
cursor.close();
return persons;
}
/**
* 获取记录总数
* @return
*/
public long getCount(){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select count(*) from person", null);
cursor.moveToFirst();
long result = cursor.getLong(0);
cursor.close();
return result;
}
也可以使用Sqlite封装的query(),delete(),update(),insert()方法
18.SQLite事务
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.beginTransaction();//开启事务
try{
db.execSQL("update person set amount=amount-10 where personid=1");
db.execSQL("update person set amount=amount+10 where personid=2");
db.setTransactionSuccessful();//设置事务的标志为True
}finally{
db.endTransaction();//结束事务,有两种情况:commit,rollback,
//事务的提交或回滚是由事务的标志决定的,如果事务的标志为True,事务就会提交,否侧回滚,默认情况下事务的标志为False
}
//分页语句跟mysql类似
select * from student limit 每页显示数*(页数-1),每页显示数
//分页
public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context) {
super(context, "itcast.db", null, 2);//<包>/databases/
}
@Override
public void onCreate(SQLiteDatabase db) {//是在数据库每一次被创建的时候调用的
db.execSQL("CREATE TABLE person(personid integer primary key autoincrement, name varchar(20), phone VARCHAR(12) NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD amount integer");
}
}
//创建测试
public void testCreateDB() throws Exception{
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
dbOpenHelper.getWritableDatabase();
}
/**
* 添加记录
* @param person
*/
public void save(Person person){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("insert into person(name, phone, amount) values(?,?,?)",
new Object[]{person.getName(), person.getPhone(), person.getAmount()});
}
getWritableDatabase()方法在数据库存储空间满了时报错
getReadableDatabase()方法在getWritableDatabase()报错的时调用,只读出数据。
/**
* 查询记录
* @param id 记录ID
* @return
*/
public Person find(Integer id){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()});
if(cursor.moveToFirst()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
int amount = cursor.getInt(cursor.getColumnIndex("amount"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
return new Person(personid, name, phone, amount);
}
cursor.close();
return null;
}
/**
* 分页获取记录
* @param offset 跳过前面多少条记录
* @param maxResult 每页获取多少条记录
* @return
*/
public List<Person> getScrollData(int offset, int maxResult){
List<Person> persons = new ArrayList<Person>();
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?",
new String[]{String.valueOf(offset), String.valueOf(maxResult)});
while(cursor.moveToNext()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
int amount = cursor.getInt(cursor.getColumnIndex("amount"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
persons.add(new Person(personid, name, phone, amount));
}
cursor.close();
return persons;
}
/**
* 获取记录总数
* @return
*/
public long getCount(){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select count(*) from person", null);
cursor.moveToFirst();
long result = cursor.getLong(0);
cursor.close();
return result;
}
也可以使用Sqlite封装的query(),delete(),update(),insert()方法
18.SQLite事务
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.beginTransaction();//开启事务
try{
db.execSQL("update person set amount=amount-10 where personid=1");
db.execSQL("update person set amount=amount+10 where personid=2");
db.setTransactionSuccessful();//设置事务的标志为True
}finally{
db.endTransaction();//结束事务,有两种情况:commit,rollback,
//事务的提交或回滚是由事务的标志决定的,如果事务的标志为True,事务就会提交,否侧回滚,默认情况下事务的标志为False
}
相关文章推荐
- Android 常用效果(各种进度条,酷炫loading动画,火箭升空,撒花以及趋势图)
- Android文本样式——下
- Android学习笔记09:Paint及Canvas的简单应用
- 关于Android Canvas.drawText方法中的坐标参数的正确解释
- Android autotest - Monkey tool
- Android M 新的运行时权限开发者需要知道的一切
- Android编程规范
- android:windowSoftInputMode属性详解
- Android自学笔记之RadioGroup和RadioButton的使用
- Android自学笔记之ChenkBox复选框
- Android自学笔记之 多个TextView跑马灯的实现
- android 布局背景模糊化处理
- Android插件实例——360 DroidPlugin详解
- [Android] createTrack_l
- 一个优秀的Android应用从建项目开始
- Android-Listview(下拉刷新,底部加载更多,电影列表实例)
- QQ音乐/酷狗音乐锁屏控制实现原理
- Android Studio 笔记之SexyEditor,设置背景
- Android CheckBox
- Android权限相关