数据库存储之Sharedpreference和SQLite

来源:互联网 发布:linux命令行创建进程 编辑:程序博客网 时间:2024/05/02 04:18

SharedPreference和SQLite都是安卓轻量级的数据库,SharedPreference一般用于存储简单的,少量的数据,可以存储String,Int,Boolean,Float和Long型数据。SQLite 能够存储NULL,INTEGER,TEXT,BLOB(二进制文本)和REAL(浮点型)5种类型,需要注意的是,SQLite不能存储boolean类型的数据,在存储时需要进行相应的类型转换实现数据的存储。
SharedPreference的利用key-value来存储数据,key是字符串类型,相当于存放的标识符,value是存储的数据值,通过key这个“标识符”来找到这个value值。
/添加数据

btn1.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View arg0) {        // TODO Auto-generated method stub        String data = et1.getText().toString();        SharedPreferences sp = getSharedPreferences("function", MODE_PRIVATE);                      //getSharedPreferences的第一个参数是指要保存的文件名,第二个参数表示要保存的模式,                Editor editor = sp.edit();        //sp调用edit方法对数据进行简单的保存操作            editor.putString("name", data);//key-value,data是我保存的数据,“name”是在文件中查找保存的数据的标志,        editor.commit();        //在对数据库做了相应的操作后要提交数据        et1.setText("");     }});

sharedpreference能够直接读取数据,但是不能直接写数据,借助edit()方法。

//删除数据(这里没什么特别的,只用了一个clear方法)

    btn2.setOnClickListener(new OnClickListener() {                 @Override            public void onClick(View arg0) {                // TODO Auto-generated method stub                SharedPreferences sp = getSharedPreferences("function", MODE_PRIVATE);                Editor editor = sp.edit();                editor.clear();                editor.commit();                et1.setText("");            }        });

//保存数据

    btn3.setOnClickListener(new OnClickListener() {                 @Override            public void onClick(View arg0) {                // TODO Auto-generated method stub                SharedPreferences sp = getSharedPreferences("function", MODE_PRIVATE);                  String data = sp.getString("name", "默认值");                et1.setText(data);            }            });

SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在字符型字段中存放日期型值。

SQLiteDatabase是一个能对数据库进行操作的类,但是它并不能独立地创建一个数据库,需要依靠辅助类SQLiteOpenHelper帮助创建并管理数据库,SQLiteOpenHelper是一个抽象类,不能被实例化,所以需要定义一个能够继承SQLiteOpenHelper类的子类,以便于能够实现创建数据库的功能,把这两个类相结合,封装成为一个能够真正实现增、删、改、查功能的DataBase类(自定义)。
SqliteDataBase能进行操作,但那时不能建立数据库,辅助类SQLiteOpenHelper能创建数据库,但是不能操作,需要这两个类相互协作实现特定的功能。

//我是想,把所有的增删改查都写在一个函数类里完成public class MyDatabase {    // 定义一个MyDatabaseOpenHelper类型的变量    MyDatabaseOpenHelper OpenHelper;    // 写一个构造函数    public MyDatabase(Context context) {        // 创建辅助对象        OpenHelper = new MyDatabaseOpenHelper(context);    }    // 增加数据    public void insert(DataSelect D) {        SQLiteDatabase S = OpenHelper.getWritableDatabase();        ContentValues v = new ContentValues();        v.put("NAME", D.NAME);        v.put("CHECKBOX1", D.CHECKBOX_1);        v.put("CHECKBOX2", D.CHECKBOX_2);        v.put("CHECKBOX3", D.CHECKBOX_3);        v.put("RADIOBUTTON", D.RADIOBUTTON);        S.insert("MYTABLE", null, v);        S.close();    }            }    }// 查看数据//Cursor功能类似于指针,查找数据时一定能用得到,在查找数据时,从第一条数据一次指引到最后一条数据,Cursor 是每行的集合。 使用moveToFirst() 定位第一行。我们必须知道每一列的名称和每一列的数据类型。 所有的数据都是通过下标取得。     public DataSelect query() {        SQLiteDatabase S = OpenHelper.getWritableDatabase();        Cursor c = S.query("MYTABLE", null, null, null, null, null, null);        DataSelect D = new DataSelect();        while (c.moveToNext()) {            D.NAME = c.getString(c.getColumnIndex("NAME"));            D.CHECKBOX_1 = c.getInt(c.getColumnIndex("CHECKBOX1"));            D.CHECKBOX_2 = c.getInt(c.getColumnIndex("CHECKBOX2"));            D.CHECKBOX_3 = c.getInt(c.getColumnIndex("CHECKBOX3"));            D.RADIOBUTTON = c.getInt(c.getColumnIndex("RADIOBUTTON"));        }        **c.close();**//close()使用后必须关闭游标,释放资源!        return D;    }    // 定义一个子类继承 SQLiteOpenHelper    class MyDatabaseOpenHelper extends SQLiteOpenHelper {        public static final String DATABASE_NAME = "My";        public static final int DATABASE_VERSION = 1;        ***String SQL = "CREATE TABLE MYTABLE(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,CHECKBOX1 INT,CHECKBOX2 INT,CHECKBOX3 INT,RADIOBUTTON INT);";***        public MyDatabaseOpenHelper(Context context) {            super(context, DATABASE_NAME, null, DATABASE_VERSION);            // TODO Auto-generated constructor stub        }        @Override        public void onCreate(SQLiteDatabase db) {            // TODO Auto-generated method stub            db.execSQL(SQL);        }        @Override        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {            // TODO Auto-generated method stub        }    }    }

在定义好一个具有特定功能(增加、删除数据)的类后,对数据操作,这里用到了radiubutton和checkebox控件,所以也会有把布尔型和int型数据相互转换的过程。

//插入数据

insert.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub save-insert    MyDatabase mydb = new MyDatabase(MainActivity.this);                DataSelect D = new DataSelect();                D.NAME = name_et.getText().toString();                //当复选框被选中时,设置值为1                if (cb_1.isChecked()) {                    D.CHECKBOX_1 = 1;                } else {                    D.CHECKBOX_1 = 0;                }                if (cb_2.isChecked()) {                    D.CHECKBOX_2 = 1;                } else {                    D.CHECKBOX_2 = 0;                }                if (cb_3.isChecked()) {                    D.CHECKBOX_3 = 1;                } else {                    D.CHECKBOX_3 = 0;                }**int checkedRadioButtonId =rg.getCheckedRadioButtonId();**//获得选中的单选按钮的id                D.RADIOBUTTON = checkedRadioButtonId;                mydb.insert(D);                Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT).show();            }        });        //查看数据        show.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub show-query    MyDatabase mydb = new MyDatabase(MainActivity.this);                DataSelect D = mydb.query();                name_et.setText(D.NAME);                //对于已经在数据库里存储的数据,把int型转换为布尔型                if (D.CHECKBOX_1 == 1) {                    cb_1.setChecked(true);                } else {                    cb_1.setChecked(false);                }                if (D.CHECKBOX_2 == 1) {                    cb_2.setChecked(true);                } else {                    cb_2.setChecked(false);                }                if (D.CHECKBOX_3 == 1) {                    cb_3.setChecked(true);                } else {                    cb_3.setChecked(false);                }                switch (D.RADIOBUTTON) {                case R.id.rb_1:                    rb_1.setChecked(true);                    break;                case R.id.rb_2:                    rb_2.setChecked(true);                    break;                case R.id.rb_3:                    rb_3.setChecked(true);                    break;                default:                    break;                }Toast.makeText(MainActivity.this, "已显示",Toast.LENGTH_SHORT).show();            }        });    }
2 0
原创粉丝点击