Sqlite数据库的增删改查
SQLite 是⼀个轻量级的数据库,⽀持SQL正规的SQL语句,可以存储⼤量数据。
建⽴SQLite数据库,要使⽤Android提供的⼀个SQLiteOpenHelper帮助类,需要新建⼀个类去继承SQLiteOpenHelper类,重写⾥⾯的两个抽象⽅法,OnCreate()和OnUpgrade(),还要重写有产构造⽅法,
有参构造重写四个参数的,第⼀个参数是上下⽂,第⼆个是数据库名称,第三个是游标Cursor,通常给值null,第四个是当亲数据库的版本号。
public重写⽅法(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
t = context;
}
onCreate()⽅法,调⽤SQLiteDatabase 对象的execSQL()⽅法,⾥⾯的参数是建表的SQL语句,
private String sql = "create table Book("
+"id integer primary Key autoincrement,"
+"author text,"
+"price real,"
+"pages integer,"
+"name text)";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
然后在主活动中new⼀个继承SQLiteOpenHelper类的对象,并且调⽤getWritableDatabase()或getRea
基本的增删改查语句
dableDatabase()⽅法。这两者都可以创建⼀个数据库,或者数据库存在就直接打开,但是当数据库不可写⼊的时候,getReaderDatabase()⽅法会以只读的⽅式打开数据
库,getWritableDatabase()⽅法则会出现异常。
在创建数据库的时候调⽤的getReaderDatabase() 或getWritableDatabase()会返回⼀个SQLiteDatabase对象,利⽤该对象调⽤相应的⽅法完成数据的增删改查
增加数据:
  可以分为两种⽅式:
  1:new⼀个ContentValues,该对象提供Put()⽅法,数据以键值对的形式储存,SQLiteDatabase对象,提供⼀个insert()⽅法,它接受三个参数,第⼀是表名,第⼆是在未给指定列赋值时,默认为null,第三就是ContentValues对象。
  2:就是调⽤SQLiteDatabase对象的execSQL()⽅法,⾥⾯传值SQL语句。
/* ContentValues values = new ContentValues();
values.put("author","周⽣磊");
values.put("price",22);
values.put("pages",33);
values.put("name","android");
db.insert("Book",null,values);
values.clear();*/
删除数据:
  1.同上调⽤delete()⽅法。第⼀个参数表名,第⼆个限定条件,第三个限定条件的值。
  2:同上
/* db.delete("book","name=?",new String[]{"android"});*/
修改数据:
  1:同上,new ⼀个ContentValues对象,⽤来存放数据,SQLiteDatabase对象调⽤updata()⽅法,传⼊四个参数,第⼀个表名,第⼆个需要修改的数据,第三个限定符,表⽰要修改哪⼀⾏等待传值,第四个传值具体修改哪⼏⾏。
  2:SQLiteDatabase对象的execSQL()⽅法,写⼊SQL语句。
/*ContentValues values1 = new ContentValues();
values1.put("price",5435);
db.update("book",values1,"name=?",new String[]{"android"});*/
查询数据:最复杂的
  1:查询数据需要调⽤rawQuery()⽅法,该⽅法返回值是⼀个Cursor(游标),利⽤Cursor遍历查询结果,⾸先确认cursor是否为空,调
⽤veToFirst(),该⽅法移动Cursor到第⼀⾏,如果为空就返回False,否则就是true,在进⾏循环进⾏遍历,利⽤
Cursor.GetString(),⽅法得到该列的具体参数,看到下⾯代码很多⼈会疑问,为什么不在.GetString(),⽅法内直接传⼊列名,⽽是⼜调⽤了⼀个Cursor.GetColumnIndex()呢?那是应为.GetString()⽅法内只接受Int类型的值,⽽.GetColumnIndex(),接受String值,返回int值,⽽GetColumnIndex()⽅法返回的int值是该列的下标,所以利⽤返回值得相互转变得到我们想要的数据值。简直完美,不是吗?
  2:调⽤的是RawQuery()⽅法,⽽不是execSQL()⽅法,⾥⾯写⼊SQL语句,查询全部则第⼆个限定参数为null,第⼆个参数类型为new String[]{}类型,⽤法同上⼀样,SQL语句?限定,new String[]{}⾥⾯给‘?‘赋值。
/*Cursor cursor = db.query("book",null,null,null,null,null,null);*/
Cursor cursor = db.rawQuery("select * from Book",null);
if (veToFirst()){
do {
//遍历Cursor对象,并打印
String author = ColumnIndex("author"));
int price = ColumnIndex("price"));
int pages = ColumnIndex("pages"));
String name = ColumnIndex("name"));
String show = "author:"+author+",price:"+price+",pages:"+pages+",name:"+name;
et_show.setText(show);
}while (veToNext());
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。