Android學習筆記(5)

myxs發表於2017-03-25

資料儲存

標籤: Android


檔案儲存

openFileOutput方法

此方法將資料儲存到指定的檔案中,2個引數

第一個是檔名,不可以包含路徑,第二個是操作模式,如Context.MODE_PRIVATE和Context.MODE_APEND

通過Java流的方式將資料寫入檔案中

public void save(String inputText) {
    FileOutputStream out = null;
    BufferedWriter writer = null;
    try {
        out = openFileOutput("data", Context.MODE_PRIVATE);
        writer = new BufferedWriter(new OutputStreamWriter(out));
        writer.write(inputText);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (writer != null) {
                writer.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

從檔案中讀取資料

public String load() {
    FileInputStream in = null;
    BufferedReader reader = null;
    StringBuilder content = new StringBuilder();
    try {
        in = openFileInput("data");
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while ((line = reader.readLine()) != null) {
            content.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return content.toString();
}

SharedPreference

將資料儲存到SharedPreferences中

3種方法獲取SharedPreferences物件

  1. Context類的getSharedPreferences()方法
  2. Activity類的getPreferences()方法
  3. PreferenceManager類的getDefaultSharedPreferences()方法

通過SharedPreferences物件儲存資料

    SharedPreferences.Editor editor = new getSharedPreferences("data",Context.MODE_PRIVATE).edit();
    editor.putString/putBoolean...方法新增資料
    editor.apply()提交資料完成資料儲存

從SharedPreferences物件讀取資料

    SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
    String name = pref.getString("name", "");
    int age = pref.getInt("age", 0);
    boolean married = pref.getBoolean("married", false);

有預設值作為當沒有值的值 有一個記住密碼的小功能可以學習下: 判斷是否已經複選了,是則通過SharedPreferences物件取出資料,否則在按鈕的監聽事件中處理資料,判斷是否需要儲存資料

SQLite資料庫

通過SQLiteOpenHelper抽象類繼承

建立資料庫

重寫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);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}

}

    MyDatabaseHelper dbHelper;
    dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
    ...
    dbHelper.getWritableDatabase();//建立資料庫和表
    ...

當需要更新資料庫時,onUpgrade裡更改如下,並更改版本為2

 db.execSQL("drop table if exists Book");
 db.execSQL("drop table if exists Category");

新增資料

通過ContentValues物件新增資料

SQLiteDataBase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "accfcx");//第一條記錄資料
...
db.insert("Book",null,values);
values.clear();
...//第二條...

更新資料

仍然通過ContentValues物件,不過只是給需要更改的列新增資料,呼叫

db.update("Book", values, "name = ?", new String[]{"accfcx"});

刪除資料

db.delete("Book", "name = ?", new String[]{"accfcx"});

查詢資料

Cursor cursor = db.query("Book", null, null, null, null, null, null);
            if (cursor.moveToFirst()) {
                do {
                    // 遍歷Cursor物件,取出資料並列印
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String author = cursor.getString(cursor.getColumnIndex("author"));
                    int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                    double price = cursor.getDouble(cursor.getColumnIndex("price"));
                } while (cursor.moveToNext());
            }
            cursor.close();

LitePay開源庫運算元據庫

配置LitePal

  1. 在app/build.gradle中新增庫依賴

     compile 'com.android.support:appcompat-v7:24.2.1'
    
  2. 在main目錄下新建assets目錄,新建litepal.xml檔案

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
         <dbname value="BookStore" ></dbname>
    
    
    
     &lt;version value="2" &gt;&lt;/version&gt;
    
    
     &lt;list&gt;
          &lt;mapping class="com.example.litepaltest.Book"&gt;&lt;/mapping&gt;
          &lt;mapping class="com.example.litepaltest.Category"&gt;&lt;/mapping&gt;
    &lt;/list&gt;
    
    </litepal>
  3. 配置AnroidManifest.xml

    <application
        android:name="org.litepal.LitePalApplication"
        ...
    

建立和升級資料庫

LitePal採用ORM方式,需要Java bean實體類作為資料庫表的對映,新建實體類,再listpal.xml中新增Book到對映模型列表中

Connector.getDatabase();

資料庫建立完畢

新增資料

前面使用ContentValues,而LitePal通過給Java Bean繼承DataSupport

public class Book extends DataSupport{
    ...
}

給Book表新增資料

Book book = new Book();
book.setName("The Da Vinci Code");
...
book.save();

更新資料

 Book book = new Book();
            book.setPrice(14.95);
            book.setPress("Anchor");
            book.updateAll("name = ? and author = ?", "The Lost Symbol", "Dan Brown");

刪除資料

DataSupport.deleteAll(Book.class, "price < ?", "15");

查詢資料

 List<Book> books = DataSupport.findAll(Book.class); 

相關文章