您的位置:首页 > 移动开发 > Android开发

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: