最近项目中多次用到数据库,之前一次也是用到的ormlite框架逛,封装的比较好,使用确实简单方便,但是作为一名猿,我们光,只会使用别人封装好的这种也不太好吧,起码自己也该知道这些基础的东西,就算离开框架我们也能完成。鉴于周末没事,特此记录一发。
SQLLite数据库创建和使用
一、写一个数据库辅助类继承抽象类SQLiteOpenHelper,并重载两个方法,并生成构造方法。
二、在onCreate()方法中创建数据库表
关于这个方法注意一下几点:
* 1、在第一次打开数据库的时候才会走
* 2、在清除数据之后再次运行-->打开数据库,这个方法会走
* 3、没有清除数据,不会走这个方法
* 4、数据库升级的时候这个方法不会走
* 5、建表语句的书写很容易出错,下面贴代码
//建表语句(最后一个字段后面的 类型修饰没有“,”,unique表示该字段唯一性)
String CREAT_FRIEND_TABLE = "Createtable "+TABLE_NAME+"("+COLUMN_ID+" integer primary key autoincrement,"
+COLUMN_UID+" text unique,"
+COLUMN_NAME+" text,"
+COLUMN_USER_IMA+" text,"
+COLUMN_AGE+ " integer "+")";
db.execSQL(CREAT_FRIEND_TABLE);
Logger.d("建表成功");
三、关于onUpgrade()数据库版本更新的方法注意一下:
* 1、第一次创建数据库的时候,这个方法不会走
* 2、清除数据后再次运行(相当于第一次创建)这个方法不会走
* 3、数据库已经存在,而且版本升高的时候,这个方法才会调用
* 4、相关语句,自行百度。
四、操作数据库
1、自定义数据库操作类,相当工具类,并通过构造传入SQLiteOpenHelper(辅助类对象)
在操作数据库之前我们需要先得到SQLiteDatabase对象
2、以下是相关方法的介绍
*1、插入一条数据
//插入一条数据,需要我们传入对应的Model对象 public void inSert(ClassMate classMate) { SQLiteDatabase db = mSQliteOpenHelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_UID, classMate.getUid() + ""); contentValues.put(COLUMN_NAME, classMate.getName() + ""); contentValues.put(COLUMN_USER_IMA, classMate.getUserima() + ""); contentValues.put(COLUMN_AGE, classMate.getAge()); db.insert(TABLE_NAME, null, contentValues); closeDb(db); }
记得所有操作完成需要关闭数据库
*2、删除数据
*3、更新数据
*4、查询数据
一、查询所有数据
二、根据条件查询对应的数据
先贴上查询语句:
Cursor query = db .query(TABLE_NAME, new String[]{COLUMN_UID, COLUMN_NAME, COLUMN_USER_IMA, COLUMN_AGE}, COLUMN_UID + "=?", new String[]{String.valueOf(uid)}, null, null, null);
各参数意义对应:
able:表名,不能为null columns:要查询的列名,可以是多个,可以为null,表示查询所有列 selection:查询条件,比如id=? and name=? 可以为null selectionArgs:对查询条件赋值,一个问号对应一个值,按顺序 可以为null having:语法have,可以为null orderBy:语法,按xx排序,可以为null*/
注意点:
第二个参数为需要查询的列名,如果我们需要查询多列如:
String query_uid = query.getString(query.getColumnIndex(COLUMN_UID)); String query_name = query.getString(query.getColumnIndex(COLUMN_NAME)); String query_ima = query.getString(query.getColumnIndex(COLUMN_USER_IMA)); int query_age = query.getInt(query.getColumnIndex(COLUMN_AGE));
那么数组里面的参数必须要包含这些字段,或者第二个参数为null,默认所有,否则报错。
第四个参数是表示为查询条件赋值的,一般对应的第三个参数问号后面的值。
查询结束之后记得关闭游标
然后就是查询条件的书写,其实也是很简单,一般就是 CLOUMN+"=?"(CLOUMN,为我们定义的表字段,如:_name).
上图:
以上介绍,仅记录一次简单学习。更加全面的知识可以移步:
http://www.runoob.com/sqlite/sqlite-where-clause.html