Android SQLite 使用 SQL 语句操作数据库
如果你已经学会了 SQL ,会写相关的 SQL 语句,不想用 Android 提供的这些 API,那么可以直接使用 SQLiteDatabase
给我们提供的相关方法
方法 | 说明 |
---|---|
execSQL(SQL,Object[]) | 使用带占位符的 SQL 语句,这个是执行修改数据库内容的 SQL 语句用的 |
rawQuery(SQL,Object[]) | 使用带占位符的 SQL 查询操作 |
这两个方法都会返回一个 Cursor
对象
Curosr 相关属性和如下
Cursor 对象有点类似于 JDBC 中的 ResultSet 结果集,提供一下方法移动查询结果的记录指针
方法 | 说明 |
---|---|
move(offset) | 指定向上或者向下移动的行数,整数表示向下移动;负数表示向上移动! |
moveToFirst() | 指针移动到第一行,成功返回true,也说明有数据 |
moveToLast() | 指针移动到最后一样,成功返回true; |
moveToNext() | 指针移动到下一行,成功返回true,表明还有元素! |
moveToPrevious() | 移动到上一条记录 |
getCount() | 获得总得数据条数 |
isFirst() | 是否为第一条记录 |
isLast() | 是否为最后一项 |
moveToPosition(int) | 移动到指定行 |
Android 使用 SQL 语句操作数据库
插入数据
public void save(Person p) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("INSERT INTO person(name,phone) values(?,?)", new String[]{p.getName(),p.getPhone()}); }
删除数据
public void delete(Integer id) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("DELETE FROM person WHERE personid = ?", new String[]{id}); }
修改数据
public void update(Person p) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("UPDATE person SET name = ?,phone = ? WHERE personid = ?", new String[]{p.getName(),p.getPhone(),p.getId()}); }
查询数据
public Person find(Integer id) { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM person WHERE personid = ?", new String[]{id.toString()}); //存在数据才返回true if(cursor.moveToFirst()) { int personid = cursor.getInt(cursor.getColumnIndex("personid")); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); return new Person(personid,name,phone); } cursor.close(); return null; }
数据分页
public List<Person> getScrollData(int offset,int maxResult) { List<Person> person = 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")); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); person.add(new Person(personid,name,phone)) ; } cursor.close(); return person; }
查询记录数
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; }
获得 Cursor 中数据的条数
首先我们要使用 SQL 语句 SELECT * FROM person
来查询数据,然后再使用 cursor.getCount()
方法获得数据的条数
强烈建议把
*
换成某个具体的字段
public long getRsCount() { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT person FROM person",null); long count = cursor.getCount(); cursor.close(); return count; }