个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max
/** * 查询所有的记录 * @return */ public List<User> queryAll() { List<User> List = new ArrayList<User>(); sqliteDatabase db = null; Cursor cursor = null; try { //获取只读数据库实例 db = dbOpenHelper.getReadableDatabase(); cursor = db.query("user",null,"_ID desc"); //遍历 Cursor for (cursor.movetoFirst(); !cursor.isAfterLast(); cursor .movetoNext()) { User user = new User(); user.setID(cursor.getInt(cursor.getColumnIndex("_ID"))); user.setname(cursor.getString(cursor.getColumnIndex("name"))); List.add(user); } } catch (Exception e) { e.printstacktrace(); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return List; }
/** * 根据 ID 查询记录 * @param ID * @return */ public User queryUserByID(int ID) { User user = new User(); sqliteDatabase db = null; Cursor cursor = null; try { //获取只读数据库 db = dbOpenHelper.getReadableDatabase(); cursor = db.query("user","_ID = ?",new String[] { String.valueOf(ID) },null); if (cursor.movetoFirst()) { user.setID(cursor.getInt(cursor.getColumnIndex("_ID"))); user.setname(cursor.getString(cursor.getColumnIndex("name"))); } } catch (Exception e) { e.printstacktrace(); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return user; }
模糊查询: 主要代码:
@H_735_403@ /** * 根据某一字段的部分值进行模糊查询 * * @param word * @return */ public List<User> queryByWord(String word) { List<User> List = new ArrayList<User>(); sqliteDatabase db = null; Cursor cursor = null; try { // 获取只读数据库 db = dbOpenHelper.getReadableDatabase(); cursor = db.query("user","name like ?",new String[] { word + "%" },null); // 遍历 Cursor for (cursor.movetoFirst(); !cursor.isAfterLast(); cursor .movetoNext()) { User user = new User(); user.setID(cursor.getInt(cursor.getColumnIndex("_ID"))); user.setname(cursor.getString(cursor.getColumnIndex("name"))); List.add(user); } } catch (Exception e) { e.printstacktrace(); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return List; }
/** * 向 user 表中 插入一个 user,将 user 的 name 属性插入到 user 表中的 name 列 * @param user * @return */ public long insert(User user) { sqliteDatabase db = null; long ID = -1; try { db = dbOpenHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name",user.getname()); ID = db.insert("user",values); } catch (Exception e) { e.printstacktrace(); } finally { if (db != null) { db.close(); } } return ID; }
(3)删除数据 db.delete(table,whereClause,whereArgs) 各参数含义: table :要删除数据的表名; whereClause : 删除条件,即普通 sql 语句 where 后面的部分,可以带 “?”; whereArgs:参数值数组。 主要代码:
/** * 删除指定 ID 的数据 * @param ID */ public voID delete(int ID) { sqliteDatabase db = null; try { db = dbOpenHelper.getWritableDatabase(); db.delete("user",new String[] { String.valueOf(ID) }); } catch (Exception e) { e.printstacktrace(); } finally { if (db != null) { db.close(); } } }
(4)更新数据 db.update(table,values,whereArgs) 各参数含义: table :要更新数据的表名; values :修改的列名和修改后的值; whereClause : 修改条件,即普通 sql 语句 where 后面的部分,可以带 “?”; whereArgs:参数值数组。 返回更新成功的行数。 主要代码:
/** * 更新数据 *** 作 * @param user * @return */ public long update(User user) { sqliteDatabase db = null; long ID = -1; try { db = dbOpenHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name",user.getname()); ID = db.update("user",new String[] { String.valueOf(user.getID()) }); } catch (Exception e) { e.printstacktrace(); } finally { if (db != null) { db.close(); } } return ID; }
2、使用 sqlite 进行数据分页: (1)创建一个分页的类 Page类
public class Page { // 每页显示的记录数 private int pageSize = 3; // 当前打的页数 private int pageNum = 1; // 总的记录数 private int totalCount = 0; // 总的页数 private int totalNum = 0; /** * 是否有下一页 * @return */ public boolean isHasNext() { if (pageNum < totalNum) { return true; } else { return false; } } /** * s是否有上一页 * @return */ public boolean isHasPre() { if (pageNum > 1) { return true; } else { return false; } } public int getPageSize() { return pageSize; } public voID setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageNum() { return pageNum; } public voID setPageNum(int pageNum) { this.pageNum = pageNum; } public int getTotalCount() { return totalCount; } public voID setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalNum() { return totalNum; } public voID setTotalNum(int totalNum) { this.totalNum = totalNum; }}
(2)获取某一页的数据
/** * 获取某一页的数据 * * @param pageSize * 每页显示记录数 * @param pageNum * 当前的页码 * @return */ public List<User> getPageUser(int pageSize,int pageNum) { List<User> List = new ArrayList<User>(); sqliteDatabase db = null; Cursor cursor = null; try { // 获取只读数据库实例 db = dbOpenHelper.getReadableDatabase(); // 使用 limit ? offset ? 来进行分页 cursor = db.query("user","_ID asc limit " + String.valueOf(pageSize) + " offset " + String.valueOf((pageNum - 1) * pageSize)); // 遍历 Cursor for (cursor.movetoFirst(); !cursor.isAfterLast(); cursor .movetoNext()) { User user = new User(); user.setID(cursor.getInt(cursor.getColumnIndex("_ID"))); user.setname(cursor.getString(cursor.getColumnIndex("name"))); List.add(user); } } catch (Exception e) { e.printstacktrace(); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return List; }
通过以上的代码,我们就完成了初步的分页 *** 作,下面我们对此进行完善一下,获得总页数,增加上一页和下一页功能。 (3)获取总页数 先获取总的记录数,在根据 pageSize 来计算得出总页数:
/** * 获取表中总的记录数 * * @return */ public int getTotalCount() { sqliteDatabase db = null; Cursor cursor = null; int totalCount = 0; try { // 获取只读数据库实例 db = dbOpenHelper.getReadableDatabase(); cursor = db.query("user",null); // 获取记录数 totalCount = cursor.getCount(); } catch (Exception e) { e.printstacktrace(); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return totalCount; } /** * 得到中的页数 * * @param pageSize * @return */ public int getTotalNum(int pageSize) { int totalNum = 0; totalNum = getTotalCount() / pageSize + 1; return totalNum; }
(4)上下翻页功能
/** * 显示下一页的数据 * * @param pageSize * 每页显示记录数 * @param pageNum * 当前的页码 * @return */ public List<User> getNextPage(int pageSize,int pageNum) { List<User> List = new ArrayList<User>(); //设置Page对象的属性 Page page = new Page(); page.setPageSize(pageSize); page.setPageNum(pageNum); page.setTotalCount(getTotalCount()); page.setTotalNum(getTotalNum(pageSize)); // 判断是否有下一页,有下一页则显示下一页的数据 if (page.isHasNext()) { List = getPageUser(pageSize,pageNum + 1); } return List; } /** * 显示上一页的数据 * * @param pageSize * 每页显示记录数 * @param pageNum * 当前的页码 * @return */ public List<User> getPrePage(int pageSize,int pageNum) { List<User> List = new ArrayList<User>(); Page page = new Page(); page.setPageSize(pageSize); page.setPageNum(pageNum); page.setTotalCount(getTotalCount()); // 判断是否有上一页,有上一页则显示上一页的数据 if (page.isHasNext()) { List = getPageUser(pageSize,pageNum - 1); } return List; }
sqlite中的事务管理: sqlite 中同样支持事务。 当我们要向数据库中插入很多的数据时,若使用 for 遍历 insert插入的话,会很消耗资源,影响效率,也不能保证插入的稳定性。因为 sqlite插入数据的时候,默认一条插入语句就是一个事务,这样在进行多条数据插入的时候就会进行多次的磁盘 *** 作,而且不能保证所有的数据都插入正确,这时候使用事务就很方便了。 1、sqlite中事务 *** 作的常用方法: beginTransaction() : 开启事务; endTransaction() : 关闭事务; setTransactionSuccessful() : 设置事务标志位的为成功,当标志位为成功时,endTransaction()就会提交事务, 否则 endTransaction() 会回滚事务。 2、sqlite中事务 *** 作的实例代码:
public long insert() { sqliteDatabase db = null; long ID = 0; try { db = dbOpenHelper.getWritableDatabase(); // 开启事务 db.beginTransaction(); ContentValues values = new ContentValues(); for (int i = 0; i < 5; i++) { values.put("name","姓名" + 1); ID = db.insert("user",values) + ID; } // 设置事务标志位为成功 db.setTransactionSuccessful(); } catch (Exception e) { e.printstacktrace(); } finally { if (db != null) { // 结束事务,根据标志位来决定是提交还是回滚 db.endTransaction(); db.close(); } } return ID; }
关于sqlite的简单使用方法就介绍到这里,下一节将总结 AndroID 中的文件存储数据。
个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max
总结以上是内存溢出为你收集整理的【Android数据存储】- SQLite Database全部内容,希望文章能够帮你解决【Android数据存储】- SQLite Database所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)