Android SQLite操作
2015-12-19 22:15
405 查看
SQLite操作
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。public class DBHelper extends SQLiteOpenHelper { private static final String DB_NAME="mydata.db";//数据库名称 public static final String DB_TABLE="myBean";//表名称 private static final int version=1;//数据库版本,可以考虑获取app版本 private static DBHelper mInstance; //这里考虑使用单例 /** * 构造方法,一般是传递一个要创建的数据库名称及参数 * @param context * @param name * @param factory * @param version */ public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } /** * 自己封装一个获得数据库的单例调用方法 * @param context * @return */ public synchronized static DBHelper getInstance(Context context){ if(mInstance==null){ mInstance=new DBHelper(context,DB_NAME,null,version); } return mInstance; } /** * 创建数据库时调用 * @param db */ @Override public void onCreate(SQLiteDatabase db) { String sql="CREATE TABLE if not exists "+DB_TABLE+"("+ "id"+" INTEGER PRIMARY KEY,"+ "time"+" VARCHAR(50),"+ "content"+" TEXT "+")"; db.execSQL(sql); } /** *版本更新时调用 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(oldVersion>newVersion) return; db.execSQL("DROP TABLE IF EXISTS "+DB_TABLE); onCreate(db); } /** * 添加一行数据到表中,并返回id值 * @param tableName * @param bean * @return */ public int addBeanToDatabase(String tableName, Bean bean){ ContentValues contentValues=new ContentValues(); contentValues.put("time",bean.getTime()); contentValues.put("content",bean.getContent()); SQLiteDatabase db=this.getWritableDatabase(); int id=(int)db.insert(DB_TABLE,null,contentValues); return id; } /** * 根据时间获得一个通用Bean对象 * * @param tableName 表名 * @param time Bean的time属性 * @return 表中一个符合time属性的bean */ public Bean getOneBean(String tableName, String time) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(tableName, new String[]{ "id", "time", "content" }, "time" + "=?", new String[]{ time}, null, null, null); if (cursor.moveToFirst()) { Bean bean = new Bean(); bean.setTime(cursor.getString(cursor.getColumnIndex("time"))); bean.setContent(cursor.getString(cursor.getColumnIndex("content"))); cursor.close(); return bean; } else { cursor.close(); return null; } } /** * 根据id获得一个通用Bean对象 * * @param tableName 表名 * @param id Bean的id属性 * @return 表中一个符合id属性的bean */ public Bean getOneBean(String tableName, int id) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " WHERE " + "id" + "=" + "'" + id + "'", null); if (cursor.moveToFirst()) { Bean bean = new Bean(); bean.setTime(cursor.getString(1)); bean.setContent(cursor.getString(2)); cursor.close(); return bean; } else { cursor.close(); return null; } } /** * 获取一张表中的所有通用Bean对象 * * @param tableName 表名 * @return 通用Bean的集合 */ public List<Bean> getAllBeans(String tableName) { List<Bean> list = new ArrayList<>(); String querySQL = "SELECT * FROM " + tableName; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(querySQL, null); if (cursor.moveToFirst()) { do { Bean bean = new Bean(); bean.setTime(cursor.getString(1)); bean.setContent(cursor.getString(2)); list.add(bean); } while (cursor.moveToNext()); } cursor.close(); return list; } /** * 删除表中时间和内容与deleteBean一致的属性 * * @param tableName 表名 * @param deleteBean 要删除的数据 */ public void deleteBean(String tableName, Bean deleteBean) { SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("DELETE FROM " + tableName + " WHERE " +"time"+ "=" + "'" + deleteBean.getTime() + "'" + " AND " +"content"+ "='" + deleteBean.getContent() + "'"); } /** * 删除表中对应id的数据 * * @param tableName 表名 * @param id id */ public void deleteBean(String tableName, int id) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(tableName, "id"+ " = ?", new String[]{String.valueOf(id)}); } /** * 更新一条与oldBean的时间一致的数据 * * @param tableName 表名 * @param oldBean 旧数据 * @param newBean 新数据 * @return 数据的id */ public int updateBean(String tableName, Bean oldBean, Bean newBean) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("time", newBean.getTime()); contentValues.put("content", newBean.getContent()); int newID = db.update(tableName, contentValues, "time" + "=?", new String[]{oldBean.getTime()}); return newID; } /** * 更新对应id的数据 * * @param tableName 表名 * @param id id * @param newBean 新数据 * @return 数据的id */ public int updateBean(String tableName, int id,Bean newBean) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("time", newBean.getTime()); contentValues.put("content", newBean.getContent()); int newID = db.update(tableName, contentValues, "id" + "=?", new String[]{String.valueOf(id)}); return newID; }
(int) delete(String table,String whereClause,String[] whereArgs) 删除数据行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法
(void) execSQL(String sql) 执行一个SQL语句,可以是一个select或其他的sql语句
(void) close() 关闭数据库
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查询指定的数据表返回一个带游标的数据集
(Cursor) rawQuery(String sql, String[] selectionArgs) 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)
通过query实现查询的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
各参数说明:
table:表名称
colums:列名称数组
selection:条件子句,相当于where
selectionArgs:条件语句的参数数组
groupBy:分组
having:分组条件
orderBy:排序类
limit:分页查询的限制
Cursor:返回值,相当于结果集ResultSet
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件