版权声明:本文为博主原创文章,未经博主允许不得转载。 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数值,它也是会自动随着数据的增加而增加,很灵活。