數據持久化

數據存儲到文件

Context類提供了一個openFileOutput()方法,能夠將數據存儲到指定的文件中。接受兩個參數,
1. 第一個參數是文件名(無需包含路徑),默認存儲 到/data/data/<package name>/files/目錄下。
2. 第二個參數是文件的操做模式,主要有兩種:MODE_PRIVATEMODE_APPEND。其中MODE_PRIVATE是默認的操做模式,表示當指定一樣文件名的時候,所寫入的內容將會覆蓋原文件中的內容。MODE_APPEND則表示若是該文件已存在就往文件裏面追加內容。還有另外兩種模式:MODE_WORLD_READABLEMODE_WORLD_WRITEABLE表示容許其它的應用程序對該程序中的文件進行讀寫操做,已被廢棄。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();
}

SharedPreferences存儲

//存儲數據
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();

//讀取數據

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

SQLite

安卓提供了一個SQLiteOpenHelper幫助類,能夠藉助這個類對數據庫進行建立和升級。sql

建表

//建表
create table Book{ id integer primary key autoincrement, author text, price real, pages integer, name text, }
  1. integer:整型
  2. real:浮點型
  3. text:文本類型
  4. blob:二進制類型

添加數據

SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("author","Dan Brown");
values.put("name","The Da Vinci Code");
values.put("pages",454);
values.put("price", 16.96);
db.insert("Book",null,values);
values.clear();

向數據庫中添加數據數據庫

更新數據

能夠使用
db.update(String Table,ContenValues values,String WhereClauses,String[] WhereArgs)markdown

第三個參數對應SQL語句中的where,其中用?做佔位符,第四個參數則表示?的內容。app

//表示將name爲The Da Vinci Code 的價格改成10.99
ConteValues values=new ContentValues();
values.put("price",10.99);
db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});

刪除數據

能夠使用db.delete(String Table,String WhereClauses,String[] WhereArgs)
第二,三兩個參數用來約束刪除某一行或幾行的數據,不指定的話就默認刪除全部行。ide

查詢數據

query()方法參數 對應SQL部分 描述
table from table_name 指定查詢的表名
columns select column1,column2 指定查詢的列名
selection where column=value 指定where的約束條件
selectionArgs - 爲where中的佔位符提供具體的數值
groupBy group by column 指定須要group by的列
having having column=value 對group by後的結果進一步約束
orderBy order by column1, column2 指定查詢結果的排序方式

Cursor cursor = db.query("Book", null, null, null, null, null, null);
上式查詢表中全部數據ui

直接使用SQL語句

除查詢以外的全部方法能夠條用db.execSQL(...)接執行SQL語句
查詢數據的方法時可調用它db.rawQuery(...)接執行SQL語句this

代碼

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private Context mContext;

    public static final String CREATE_BOOK="create table Book (" +
            "id integer primary key autoincrement," +
            "author text," +
            "price real," +
            "pages integer," +
            "name text)";

    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);
        //db.execSQL(CREATE_CATEGORY);
        Toast.makeText(mContext,"Create succeeded", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists Category");
        onCreate(db);
    }
}
public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//最後一個數是版本號,若版本號比原先高,則會調用 SQLiteOpenHelper中的onUpgrade()。
        dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,5);

        Button button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dbHelper.getWritableDatabase();
            }
        });

        Button addData=(Button)findViewById(R.id.add_data);
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db=dbHelper.getWritableDatabase();

                //向數據庫中添加數據
                ContentValues values=new ContentValues();
                values.put("author","Dan Brown");
                values.put("name","The Da");
                values.put("pages",454);
                values.put("price", 16.96);
                db.insert("Book",null,values);
                values.clear();
            }
        });
    }
}
相關文章
相關標籤/搜索