Android—数据存储(二)

3、SQLLite存储

思维导图:



          SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。一般数据库采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。



SQLiteOpenHelper类介绍

SQLiteOpenHelperSQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreateonUpgrade方法。

方法名

方法描述

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、网络存储

《后面再讲解》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值