android 數據存儲小結

一,sharedpreferences
保存的數據主要是相似於配置信息合適的數據,主要保存的數據是key-value對
方法:定義一個sharedpreferences對象,而後用.edit()方法來獲取一個editor對象,editor對象能夠用來執行存儲和修改數據操做,每次操做都要
commit一下,而sharepreferences對象只能讀取操做

ps:在 DDOM filter explorer的data目錄下打不開data文件.緣由是手機沒有得到root權限,改成用虛擬機運行就沒有該問題了,
        SharedPreferences  pref=getSharedPreferences("mypref",MODE_PRIVATE);  //mode表示讀取權限
        Editor editor=pref.edit();  //調用它的EDITOR方法來獲取一個editor對象
        editor.putString("name","taylor");
        editor.putInt("age",12);
        editor.putLong("time",System.currentTimeMillis());
        editor.commit();  //每進行一次操做就要提交一次
        editor.remove("age");
        editor.commit();
        
        System.out.println(pref.getString("name","swift"));  //取值
        
        
2、SQLite
.db.execSQL(sql)  //執行任何SQL語句
 db.insert(table,nullColumuHack,values)  //null爲默認
  db.delete(table,whereClause,whereArgs)
  db.update(table,values,whereClause,whrereArgs)
  db.query(table,colums,selection,selectionArgs,groupBy,having,orderBy)
  db.rawQuery(sql,selectionArgs)  //s第二個參數爲查詢條件,null爲默認所有把數據查出
 
 
 
打開或者建立數據庫
       SQLiteDatabase db=openOrCreateDatabase("user.db",MODE_PRIVATE,null); //數據庫名字必須加後綴
       
 插入sql語句,建表語句   
       db.execSQL("creat table if not exists usertb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");   //主鍵能夠沒必要寫在插入語句裏面
       注意在定義主鍵名字前面必須加上_id
       
在新建的表格裏面插入數據
 db.execSQL("insert into userb (name,age,sex) values('張三',18,'女')");
 
 更新、修改數據庫裏面部分值數據庫
   
   
   查找
   Cursor c=db.rawQuery("select *from usertb",null); //遊標爲存儲結果的集合
   if(c!=null)
   {
   while(c.movetoNext)  //不管幾條數據U都要加上游標便利
   {
      Log.i("info","_id:"+c.getInt(c.getColumnIndex("_id")));
      Log.i("info","name:"+c.getString(c.getColumnIndex("name")));
      Log.i("info","sex:"+c.getInt(c.getColumnIndex("sex")));
    }
    c.close();  //人爲釋放內存對象
   }
   db.close();       
 
   $關於 Cursor
   Cursor 是每行的集合,當執行數據庫 db.rawQuery查詢語句的時候會返回一個Cursor對象,全部數據庫裏面的數據均可以經過該Cursor來得到.
   關於Cursor的重要方法:
   close()
關閉遊標,釋放資源
copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
在緩衝區中檢索請求的列的文本,將將其存儲
getColumnCount()
返回全部列的總數
getColumnIndex(String columnName)
返回指定列的名稱,若是不存在返回-1
getColumnIndexOrThrow(String columnName)
從零開始返回指定列名稱,若是不存在將拋出IllegalArgumentException 異常。
getColumnName(int columnIndex)
從給定的索引返回列名
getColumnNames()
返回一個字符串數組的列名
getCount()
返回Cursor 中的行數
moveToFirst()
移動光標到第一行
moveToLast()
移動光標到最後一行
moveToNext()
移動光標到下一行
moveToPosition(int position)
移動光標到一個絕對的位置
moveToPrevious()
移動光標到上一行
 
 注意:若是查詢數據較小不會有內存問題,若是數據量很大,特別是裏面有Blob信息時,應該保證Cursor佔用內存及時被釋放掉
  cursor.close();
  注意在最後也應該把數據庫釋放掉!
 
 
  使用內置函數操做 //推薦
 ContentValues:
  用於存儲一組能夠被ContentResolve處理的值
 
     
     
       SQLiteDatabase db=openOrCreateDatabase("stu.db",MODE_PRIVATE,null);
        db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,task_type text,task text,date text)");
        ContentValues values=new ContentValues();
        values.put("task_type","我要減肥肥");
        values.put("task", "今天不吃飯");
        values.put("date", "2015-12-27");

        long rowId=db.insert("stutb",null,values); //返回所在列的序號
        values.clear(); //每次都要清空一次

        values.put("task_type","我要減肥肥");
        values.put("task","今天不吃飯");
        values.put("date", "2015-12-27");

        long rowid=db.insert("stutb",null,values); //返回所在列的序號
        values.clear();

        //修改和刪除操做
        values.put("task","我要跑步");
        db.update("stu.db", values, "_id>?", new String[]{"3"}); //將id>3的任務所有改爲我要跑步
        db.delete("stu.db","task like ?",new String [] {"%減肥%"}); //將任務中帶有減肥的字段刪除

        //查詢
        Cursor c=db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "task");
        if(c!=null){
            String []columns=c.getColumnNames();  //該方法返回全部類列的內容
            while(c.moveToNext()){
                for (String columnName:columns) {
                    System.out.print(c.getString(c.getColumnIndex(columnName)));

                }
            }
        }


 
 

 3.輔助類SQLiteOpenHelper總結 java

(學習博客 http://byandby.iteye.com/blog/836250) sql

1.Java:先寫一個類繼承SQLiteOpenHelper 數據庫

/**
 * Created by yx on 2015/12/27.
 */
public class MySqliteHelper extends SQLiteOpenHelper{

    public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {  //在此方法裏面建立表格和主要類型
        db.execSQL("create table if not exists my_table(_id integer primary key autoincrement,task_type text,task text,date text)");
    }

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

    }
}





2,在主函數裏調用 swift

public class MainActivity extends AppCompatActivity {

    MySqliteHelper mySqliteHelper;

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

        mySqliteHelper=new MySqliteHelper(this,"my.db",null,1);
        //插入
        Insert(mySqliteHelper);
        //更新
        int iiid=1;
        Update(mySqliteHelper,iiid);
        //刪除
        int iidd=1;
        Delete(mySqliteHelper,iidd);
        //查詢
        int iid=1;
        String text=queryData(mySqliteHelper,iid);

    }

    //插入
    public void Insert(MySqliteHelper mySqliteHelper){
        SQLiteDatabase db=mySqliteHelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put("task_type", "我要減肥");
        values.put("task", "不吃晚飯");
        values.put("date", "2015-12-27");
        db.insert("my_table", null, values);
        db.close();
    }

    //更新
    public  void  Update(MySqliteHelper mySqliteHelper,int iiid){
        SQLiteDatabase db=mySqliteHelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put("task_type","better");
        db.update("my_table", values, "_id=?", new String[]{"iiid"});
        db.close();
    }

    //刪除
    public void Delete(MySqliteHelper  mySqliteHelper,int iidd){
        SQLiteDatabase db=mySqliteHelper.getWritableDatabase();
        db.delete("my_table","_id==?",new String[]{"iidd"});

    }



    //查詢
    public String queryData(MySqliteHelper mySqliteHelpe,int iid){
        SQLiteDatabase db=mySqliteHelpe.getReadableDatabase();
        String text="";
        Cursor c=db.rawQuery("select * from my_table",null);
        if(c!=null){
            String []columns=c.getColumnNames();
            while(c.moveToNext()){
                if(c.getInt(c.getColumnIndex("_id"))==iid){
                    break;
                }
            }
            for (String columnname :columns) {
                text=c.getString(c.getColumnIndex(columnname))+"  "+text;
            }

        }
        c.close();
        db.close();

        return  text;
    }
      
相關文章
相關標籤/搜索