3、SQLLite存储
思维导图:
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。一般数据库采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。
SQLiteOpenHelper类介绍
SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。
方法名 | 方法描述 |
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) | 构造方法,其中 context 程序上下文环境 即:XXXActivity.this; name :数据库名字; factory:游标工厂,默认为null,即为使用默认工厂; version 数据库版本号 |
onCreate(SQLiteDatabase db) | 创建数据库时调用 |
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) | 版本更新时调用 |
getReadableDatabase() | 创建或打开一个只读数据库 |
getWritableDatabase() | 创建或打开一个读写数据库 |
SQLiteDatabase的常用方法
方法名称 | 方法表示含义 |
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory) | 打开或创建数据库 |
insert(String table,String nullColumnHack,ContentValues values) | 插入一条记录 |
delete(String table,String whereClause,String[] whereArgs) | 删除一条记录 |
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) | 查询一条记录 |
update(String table,ContentValues values,String whereClause,String[] whereArgs) | 修改记录 |
execSQL(String sql) | 执行一条SQL语句 |
close() | 关闭数据库 |
创建数据库
1、首先新建一个Java类,DBHelper 继承SQLiteOpenHelper
2、重写两个方法和一个构造
onCreate(SQLiteDatabase db) 该方法只会被调用一次,可以用来创建表
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 该方法数据库版本升级时调用的。低→高
DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 参数:context 上下文 name 数据库的名字,“文件名.db”
factory 数据库工厂,null version 数据库版本
3、在Java类中使用
DBHelper dbHelper=new DBHelper(this,"first.db",null,1);
SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
注意:官方解释读取数据库时使用getReadableDatabase,增删改的时候用getWritableDatabase,但是实践证明两者都可以。
代码示例:
package com.zking.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by Administrator on 2017/6/25 0025.
*/
public class DbHelper extends SQLiteOpenHelper{
/**
*
* @param context 上下文
* @param name 数据库的名字,“文件名.db”
* @param factory 数据库工厂,null
* @param version 数据库版本
*/
public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
Log.i("test","构造方法");
}
//使用该方法:创建表
//只会调用一次
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("test","创建表");
db.execSQL("create table login(uid integer primary key autoincrement,uname,upass)");
//创建一个登陆表,UID,Integer类型,为主键,自动增长,Uname,Upass三个列
}
//数据库版本 低-->高
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("test","升级数据库版本");
}
//降低版本时(一般不会使用)
// @Override
// public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// super.onDowngrade(db, oldVersion, newVersion);
// }
①增
第一种:
//实例化常量值
ContentValues cValue = new ContentValues();
//添加用户名
cValue.put("uname","admin");
//添加密码
cValue.put("upass","123456");
//调用insert()方法插入数据
sqLiteDatabase.insert("login,null,cValue);
第二种:(执行SQL语句,程序员通常采用这样,简单明了。)
sqLiteDatabase.execSQL("insert into login(uname,upass) values('sa','123')");
②删
第一种:
sqLiteDatabase.delete("login","uid=?",new String[]{102+""});
第一个参数(表名)第二个参数(要修改的条件,可以是多个)第三个参数(一 一对应前面的条件,但只能填String类型所以可拼接双引号)
第二种:和数据库中的sql语句一样
sqLiteDatabase.execSQL("delete from login where uid=1");
③改
第一种:
ContentValues contentValues=new ContentValues();
contentValues.put("uname",uname);
contentValues.put("upass",upass);
sqLiteDatabase.update("login",contentValues,"uid=?",new String[]{1+""});
第二种:和数据库中一样
sqLiteDatabase.execSQL("update login set uname=sa123 where uname=sa");
④查(因为查是要返回信息的,所以我们用游标接收(相当于集合))
第一种:(分页查询)
int pageNo=2;
int pageSize=3;
Cursor cursor=sqLiteDatabase.rawQuery("select * from login limit ?,?",new String[]{((pageNo-1)*pageSize)+"",pageSize+""});
while (cursor.moveToNext()){
int uid=cursor.getInt(cursor.getColumnIndex("uid"));
String name=cursor.getString(cursor.getColumnIndex("uname"));
String pass=cursor.getString(cursor.getColumnIndex("upass"));
Log.i("test",uid+" "+name+" "+pass);
}
第二种:和数据库中一样,执行sql语句
Cursor cursor=sqLiteDatabase.execSQL(“select * from login limit 1,3”);
while (cursor.moveToNext()){
int uid=cursor.getInt(cursor.getColumnIndex("uid"));
String name=cursor.getString(cursor.getColumnIndex("uname"));
String pass=cursor.getString(cursor.getColumnIndex("upass"));
Log.i("test",uid+" "+name+" "+pass);
}
4、ContentProvider存储
《后面再讲解》
5、网络存储
《后面再讲解》