数据库存储之Sharedpreference和SQLite

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();
            }
        });
    }

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Crystal_wxj/article/details/53151111
文章标签: 存储 安卓
个人分类: 安卓
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭