android sqlite数据库封装增删查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jian11058/article/details/89239010

直接代码:

public class MySQLiteOpenHelp extends SQLiteOpenHelper {
    private static MySQLiteOpenHelp instance;
    private static Context context;
    private static final String DB="MonniterDB";
    private SQLiteDatabase db;
    public static final String TABLENAME="Alarm";

    public static final String IDColum="_id";
    public static final String UIDColum="uid";
    public static final String ALARMNAME="alarmName";
    public static final String ALARMTYPE="alarmType";
    public static final String ALARMTIME="alarmTime";
    public static final String DEVICESERIAL="deviceSerial";
    public static final String PHOTOURL="alarmPicUrl";

    public static MySQLiteOpenHelp getInstance(Context contexto){
        context=contexto;
        if (instance==null){
            synchronized (MySQLiteOpenHelp.class){
                if (instance==null){
                    instance=new MySQLiteOpenHelp();
                }
            }
        }
        return instance;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql="create table Alarm(_id integer primary key autoincrement," +
                "uid text,alarmName text,alarmTime text,alarmType text,deviceSerial text,alarmPicUrl text)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    private MySQLiteOpenHelp(){
        super(context,DB,null,1);
        db=getWritableDatabase();
    }
    public void query(String selection ,String[] selectionArgs){
        /* distinct 剔除重复数据,true剔除,false不剔除;
         * table 表名称;
         * columns  显示的列名;
         * selection 筛选规则;
         * selectionArgs 筛选值;
         * groupBy 分组;
         * having 分组筛选;
         * orderBy 排序;列名 asc自动升降序
         * limit 分页;
         */
//        db.star();//开始事物
        Cursor cursor=db.query(TABLENAME,new String[]{IDColum,UIDColum,ALARMNAME,ALARMTYPE,ALARMTIME,DEVICESERIAL,PHOTOURL},
                selection,selectionArgs,null,null,null,null);
        while (cursor.moveToNext()){
            String id=cursor.getString(cursor.getColumnIndexOrThrow(IDColum));
            String uid=cursor.getString(cursor.getColumnIndexOrThrow(UIDColum));
            String name=cursor.getString(cursor.getColumnIndexOrThrow(ALARMNAME));
            String type=cursor.getString(cursor.getColumnIndexOrThrow(ALARMTYPE));
            String time=cursor.getString(cursor.getColumnIndexOrThrow(ALARMTIME));
            String serial=cursor.getString(cursor.getColumnIndexOrThrow(DEVICESERIAL));
            String photourl=cursor.getString(cursor.getColumnIndexOrThrow(PHOTOURL));
            Log.e("query", "query uid: "+uid );
            Log.e("query", "query id: "+id );
            Log.e("query", "query name: "+name );
            Log.e("query", "query type: "+type );
            Log.e("query", "query time: "+time );
            Log.e("query", "query serial: "+serial );
            Log.e("query", "query photourl: "+photourl );
        }
//        db.close();//关闭
    }
    public void addAlarmInfo(AlarmInfo info ){
//        db.beginTransaction();//开始事物
        ContentValues cv = new ContentValues();
        cv.put(UIDColum,info.getUid());
        cv.put(ALARMNAME,info.getAlarmName());
        cv.put(ALARMTIME,info.getAlarmTime());
        cv.put(ALARMTYPE,info.getAlarmType());
        cv.put(DEVICESERIAL,info.getDeviceSerial());
        cv.put(PHOTOURL,info.getAlarmPicUrl());
        db.insert(TABLENAME,null,cv);
//        db.close();//关闭 关闭之后,即便调用beginTransaction也无法再次成功调用db,
    }
    public void deleteAlarmInfo(String uid,String time){
        db.delete(TABLENAME,UIDColum+"=?and"+ALARMTIME+"=?",new String[]{uid,time});
    }
    public void deleteAllInfo(){
        db.delete(TABLENAME,"_id>?",new String[]{"0"});
    }

	public void deleteTable(){//删除表
        String sqldelete="drop table Alarm";
        db.execSQL(sqldelete);
    }
    public void createTable(){//新建表
        String sql="create table Alarm(_id integer primary key ," +
                "uid text,alarmName text,alarmTime text,alarmType text,deviceSerial text,alarmPicUrl text)";
        db.execSQL(sql);
    }
}


这里要说一点就是 db.close()关闭之后,即便调用beginTransaction也无法再次成功调用db,close谨慎使用
如果设置了主键且自动增加,删除成功后,主键id数值虽然被删除了,但是位置没有被删除,即:删除过id=0的数值,这个时候再新建数值,虽然id=0的位置上没有数值了,但是这条数据不为在id=0的位置,这时候主键id=1了,这也是主键的机制。但是在项目里,会有很多的数据需要存储如果删除的也要占一行,那也会浪费资源,所以就不要设置主键自动增加就可以了,在没有设置主键自动增加的情况下,创建时,没有输入id数值,它也是会自动随着数据的增加而增加,很灵活。

猜你喜欢

转载自blog.csdn.net/jian11058/article/details/89239010