zoukankan      html  css  js  c++  java
  • Android笔记——Android中数据的存储方式(三)

      Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它。SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存取,现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,并且它是以手机内存为储存的。

      那么,实际开发项目中有大量数据需要读写,并且需要面临大量用户的并发储存的情况呢。就不应该把数据存放在手机等移动设备的SQLite数据库里,移动设备的储存能力和计算能力都不足以让它充当服务器的角色。虽然SQLite支持大部分SQL-92语法,也可以使用SQL语句,和其他的主要 SQL 数据库没什么区别。但SQLite并不像Oracle、MySQL数据库那样需要安装、启动服务器进程,SQLite数据库只是一个文件。

      综上所述,我们可以总结出SQLite数据库的特点:

        面向资源有限的设备;

        没有服务器进程;

        所有数据存放在同一文件中,可自由复制;

        跨平台;

        操作方便,使用标准的CRUDE语句,ContentResolver.query(), update(), delete() insert()。

      还有其他的特点:效率出众,这是无可否认的; 十分适合存储结构化数据 ;方便在不同的Activity,甚至不同的应用之间传递数据。

    1.3  例子

      4.  SQLite数据库

        3.1 案例:创建SQLite数据库

        

    • 创建数据库需要使用的api:SQLiteOpenHelper

      • 必须定义一个构造方法:

        //arg2:数据库文件的名字
        //arg3:游标工厂
        //arg4:数据库版本
        public MyOpenHelper(Context context, String name, CursorFactory factory, int version){}
        
      • 数据库被创建时会调用:onCreate方法
      • 数据库升级时会调用:onUpgrade方法
    • 创建数据库步骤:
        //创建OpenHelper对象
        MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);
        //获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得
        SQLiteDatabase db = oh.getWritableDatabase();
    
    • getWritableDatabase():打开可读写的数据库
    • getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库
    • 在创建数据库时创建表

      public void onCreate(SQLiteDatabase db) {
          // TODO Auto-generated method stub
          db.execSQL("create table person (_id integer primary key autoincrement, name char(10), phone char(20), money integer(20))");
      }
      
    • 代码:
      •  创建MyOpenHelper类继承 SQLiteOpenHelper
    package com.bokeyuan.createsqlite;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class MyOpenHelper extends SQLiteOpenHelper {
    
        public MyOpenHelper(Context context, String name, CursorFactory factory,
                int version) {
            //name:数据库文件的名字
            //factory:游标工厂
            //version:数据库的版本号
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
        }
    
        //数据库创建时,此方法调用
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            System.out.println("数据库被创建了");
         //创建表
            db.execSQL("create table person(_id integer primary key autoincrement, name char(10), phone char(20), money integer(10))"); }
    //数据库升级时,此方法调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub System.out.println("数据库升级了"); } }
      •  这里不再用前台视图布局,直接用单元测试框架。

          在com.bokeyuan.createsqlite.domian包中创建Test.java 并继承 AndroidTestCase类。

          

    package com.bokeyuan.createsqlite.domian;
    
    import com.bokeyuan.createsqlite.MyOpenHelper;
    
    import android.database.sqlite.SQLiteDatabase;
    import android.test.AndroidTestCase;
    
    public class Test extends AndroidTestCase {
        
        public void Test() {
            // 创建数据库
            //1.创建OpenHelper对象
                                                //获取一个虚拟上下文
            MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 2);
            //2.创建数据库
            //如果数据库不存在,那么先创建,再打开,如果数据库已经存在,侧直接打开
            SQLiteDatabase db = oh.getWritableDatabase();
            //如果磁盘不足,数据库只读
    //        SQLiteDatabase db = oh.getReadableDatabase();
        }
    }
      • 在清单文件AndroidManifest.xml设置指令集和库:

          <instrumentation
                  android:name="android.test.InstrumentationTestRunner"
                  android:targetPackage="com.bokeyuan.createsqlite"></instrumentation>

          <uses-library android:name="android.test.runner"/>

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.bokeyuan.createsqlite"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="19"
            android:targetSdkVersion="19" />
    
        <instrumentation 
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.bokeyuan.createsqlite"></instrumentation>
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <uses-library android:name="android.test.runner" />
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    View Code

          数据库存储在 data/< 项目文件夹 >/databases/ 下。我们可以用SQLite Professional打开。

          

          数据库创建时,此方法调用  说明onCreate()方法被调用了,数据库被创建了

          

          
             把version改成2,Run As →Android JUint Test后, 调用onUpgrade()方法,数据库升级了

            //1.创建OpenHelper对象
                                                //获取一个虚拟上下文
              MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 2);

               

    参考资料

    Android应用开发基础之数据存储和界面展现(三)

    Android实现数据存储技术

    Android中SQLite应用详解

    Android数据存储五种方式总结

    Android开发笔记之: 数据存储方式详解

  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/McCa/p/5136651.html
Copyright © 2011-2022 走看看