数据库存储之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(); } }); }
- 数据库存储之Sharedpreference和SQLite
- Android基础之数据存储SharedPreference和SQLite
- Android 存储方式之SharedPreference SQLite ContentProvider
- 数据存储File SharedPreference Sqlite
- 数据存储之 SharedPreference
- 存储数据之SharedPreference
- 数据存储之SharedPreference
- 16读书笔记之文件存储和SharedPreference存储
- 文件存储之SharedPreference存储
- Android存储之SQLite数据库
- android存储之SQLite数据库
- Android存储 sharedpreference,file,SQlite,contentprovider。
- SharedPreference、文件存储 (FIleInputStream/FileOutputStream).SQLite
- Android数据存储之数据库(SQLite和litepal)
- sharedPreference存储对象-数据库存储对象;android 将map保存到sqlite数据库中,从表数据中取回map
- android数据存储之文件方式和SharedPreference
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Java爬虫(4)——HttpGet vs HttpPost
- 文章标题 POJ 3278 : Catch That Cow(BFS)
- addToBackStack使用和Fragment执行流程
- HDU 2021
- [C++]利用逆波兰式,简单实现下加减乘除的混合运算
- 数据库存储之Sharedpreference和SQLite
- 基于深度学习的目标检测研究进展
- RecyclerView的监听
- LeetCode 342. Power of Four
- 【mini2440】ARM汇编指令2
- 面向对象基本原则
- 网络安全是一门平衡的艺术
- 小白的python笔记(进阶)
- UML学习(二)-----类图