Android SQLite操作

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值