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