美文网首页
Android数据存储(二)——SQLite

Android数据存储(二)——SQLite

作者: 不会敲代码的好代码 | 来源:发表于2018-07-27 16:49 被阅读10次

    1. SQLite简介

    SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
    主要特点:轻量级,单一文件,跨平台,开源。

    2 .SQLite数据类型

    一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下常用的数据类型:

    NULL: 这个值为空值
    VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。
    CHAR(n):长度固定为n的字串,n不能超过 254。
    INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
    REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
    TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
    BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。
    DATA :包含了 年份、月份、日期。
    TIME: 包含了 小时、分钟、秒。

    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()//关闭数据库
    

    3. 创建数据库

    Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper 帮 助类,借助这个类就可以非常简单地对数据库进行创建和升级。既然有好东西可以直接使用, 那我们自然要尝试一下了,下面我就将对 SQLiteOpenHelper 的基本用法进行介绍。

    SQLiteOpenHelper 是一个抽象类,这意味着如果我们想要使用它的话, 就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper 中有两个抽象方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两 个方法中去实现创建、升级数据库的逻辑。

    SQLiteOpenHelper 中 还 有 两 个 非 常 重 要 的 实 例 方 法 , getReadableDatabase() 和 getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在 则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不 同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对 象将以只读的方式去打开数据库,而 getWritableDatabase()方法则将出现异常。

    SQLiteOpenHelper 中有两个构造方法可供重写,一般使用参数少一点的那个构造方法即 可。这个构造方法中接收四个参数,第一个参数是 Context,这个没什么好说的,必须要有 它才能对数据库进行操作。第二个参数是数据库名,创建数据库时使用的就是这里指定的名 称。第三个参数允许我们在查询数据的时候返回一个自定义的 Cursor,一般都是传入 null。 第 四 个 参 表 示 当 前 数 据 库 的 版 本 号 , 可 用 于 对 数 据 库 进 行 升 级 操 作 。

    在Activity中构 建 出 SQLiteOpenHelper 的实例之后,再调用它的 getReadableDatabase()或 getWritableDatabase()方法就能够创建数据库了,getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
    数据库文件会存放在/data/data/<package name>/databases/目录下。
    此时,重写的 onCreate()方法也会得到执行,所以通常会在这里去处理一些创建表的逻辑。
    示例代码:

    public class MyDataBaseHelper extends SQLiteOpenHelper {
    
        public static final String CREATE_BOOK = "create table book ("
                + "id integer primary key autoincrement, "
                + "author text, "
                + "price real, "
                + "pages integer, "
                + "name text)";
    
        private Context mContext;
    
        public MyDataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
            mContext = context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_BOOK);
            Toast.makeText(mContext,"创建成功",Toast.LENGTH_SHORT).show();
            Log.d("db",db.query(CREATE_BOOK,id,"3",))
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    
        }
    }
    

    实例化

    public class MainActivity extends Activity {
    
       private MyDatabaseHelper dbHelper;
    
      @Override
    
      protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main);
      dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1); 
      Button createDatabase = (Button) findViewById(R.id.create_database);
      createDatabase.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
      dbHelper.getWritableDatabase();
                 }
          });
    
    }
    
    

    相关文章

      网友评论

          本文标题:Android数据存储(二)——SQLite

          本文链接:https://www.haomeiwen.com/subject/gmowmftx.html