第一种方式示例:
package cn.itcast.sqlite.service; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import cn.itcast.sqlite.DBOpenHelper; import cn.itcast.sqlite.domain.Person; public class SQLPersonService { private DBOpenHelper helper; public SQLPersonService(Context context) { helper = new DBOpenHelper(context, "itcast.db", null, 2);//初始化数据库 } /** * 插入一个Person * @param p 要插入的Person */ public void insert(Person p) { SQLiteDatabase db = helper.getWritableDatabase(); //获取到数据库 db.execSQL("INSERT INTO person(name,phone,balance) VALUES(?,?)", new Object[] { p.getName(), p.getPhone() }); db.close(); } /** * 根据ID删除 * @param id 要删除的PERSON的ID */ public void delete(Integer id) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("DELETE FROM person WHERE id=?", new Object[] { id }); db.close(); } /** * 更新Person * @param p 要更新的Person */ public void update(Person p) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("UPDATE person SET name=?,phone=?,balance=? WHERE id=?", new Object[] { p.getName(), p.getPhone(), p.getBalance(), p.getId() }); db.close(); } /** * 根据ID查找 * @param id 要查的ID * @return 对应的对象, 如果未找到返回null */ public Person find(Integer id) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT name,phone,balance FROM person WHERE id=?", new String[] { id.toString() }); Person p = null; if (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(1); Integer balance = cursor.getInt(2); p = new Person(id, name, phone, balance); } cursor.close(); db.close(); return p; } /** * 查询所有Person对象 * @return Person对象集合, 如未找到, 返回一个size()为0的List */ public List<Person> findAll() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT id,name,phone,balance FROM person", null); List<Person> persons = new ArrayList<Person>(); while (cursor.moveToNext()) { Integer id = cursor.getInt(0); String name = cursor.getString(1); String phone = cursor.getString(2); Integer balance = cursor.getInt(3); persons.add(new Person(id, name, phone, balance)); } cursor.close(); db.close(); return persons; } /** * 查询某一页数据 * @param page 页码 * @param size 每页记录数 * @return */ public List<Person> findPage(int page, int size) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT id,name,phone,balance FROM person LIMIT ?,?" // , new String[] { String.valueOf((page - 1) * size), String.valueOf(size) }); List<Person> persons = new ArrayList<Person>(); while (cursor.moveToNext()) { Integer id = cursor.getInt(0); String name = cursor.getString(1); String phone = cursor.getString(2); Integer balance = cursor.getInt(3); persons.add(new Person(id, name, phone, balance)); } cursor.close(); db.close(); return persons; } /** * 获取记录数 * @return 记录数 */ public int getCount() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM person", null); cursor.moveToNext(); return cursor.getInt(0); } }
第二种方式示例:
/** * 插入一个Person * @param p 要插入的Person */ public void insert(Person p) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", p.getName()); values.put("phone", p.getPhone()); values.put("balance", p.getBalance()); // 第一个参数是表名, 第二个参数是如果要插入一条空记录时指定的某一列的名字, 第三个参数是数据 db.insert("person", null, values); db.close(); } /** * 根据ID删除 * @param id 要删除的PERSON的ID */ public void delete(Integer id) { SQLiteDatabase db = helper.getWritableDatabase(); db.delete("person", "id=?", new String[] { id.toString() }); db.close(); } /** * 更新Person * @param p 要更新的Person */ public void update(Person p) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("id", p.getId()); values.put("name", p.getName()); values.put("phone", p.getPhone()); values.put("balance", p.getBalance()); db.update("person", values, "id=?", new String[] { p.getId().toString() }); db.close(); } /** * 根据ID查找 * @param id 要查的ID * @return 对应的对象, 如果未找到返回null */ public Person find(Integer id) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("person", new String[] { "name", "phone", "balance" }, "id=?", new String[] { id.toString() }, null, null, null); Person p = null; if (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(1); Integer balance = cursor.getInt(2); p = new Person(id, name, phone, balance); } cursor.close(); db.close(); return p; } /** * 查询所有Person对象 * @return Person对象集合, 如未找到, 返回一个size()为0的List */ public List<Person> findAll() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("person", new String[] { "id", "name", "phone", "balance" }, null, null, null, null, "id desc"); List<Person> persons = new ArrayList<Person>(); while (cursor.moveToNext()) { Integer id = cursor.getInt(0); String name = cursor.getString(1); String phone = cursor.getString(2); Integer balance = cursor.getInt(3); persons.add(new Person(id, name, phone, balance)); } cursor.close(); db.close(); return persons; } /** * 查询某一页数据 * @param page 页码 * @param size 每页记录数 * @return */ public List<Person> findPage(int page, int size) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query( // "person", new String[] { "id", "name", "phone", "balance" }, null, null, null, null, null, (page - 1) * size + "," + size); List<Person> persons = new ArrayList<Person>(); while (cursor.moveToNext()) { Integer id = cursor.getInt(0); String name = cursor.getString(1); String phone = cursor.getString(2); Integer balance = cursor.getInt(3); persons.add(new Person(id, name, phone, balance)); } cursor.close(); db.close(); return persons; } /** * 获取记录数 * @return 记录数 */ public int getCount() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query( // "person", new String[] { "COUNT(*)" }, null, null, null, null, null); cursor.moveToNext(); return cursor.getInt(0); }
事务管理
1.使用在SQLite数据库时可以使用SQLiteDatabase类中定义的相关方法控制事务
beginTransaction() 开启事务
setTransactionSuccessful() 设置事务成功标记
endTransaction() 结束事务
2.endTransaction()需要放在finally中执行,否则事务只有到超时的时候才自动结束,会降低数据库并发效率
示例:
public void remit(int from, int to, int amount) { SQLiteDatabase db = helper.getWritableDatabase(); // 开启事务 try { db.beginTransaction(); db.execSQL("UPDATE person SET balance=balance-? WHERE id=?", new Object[] { amount, from }); System.out.println(1 / 0); db.execSQL("UPDATE person SET balance=balance+? WHERE id=?", new Object[] { amount, to }); // 设置事务标记 db.setTransactionSuccessful(); } finally { // 结束事务 db.endTransaction(); } db.close(); }
希望本文所述对大家Android程序设计有所帮助。
标签:SQLite
相关阅读 >>
android studio3.6.3 当前最新版本数据库查找与导出方法(图文详解)
android平台的sql注入漏洞浅析(一条短信控制你的手机)
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。