Android数据存储概述
来源:互联网 发布:网络课件制作 编辑:程序博客网 时间:2024/06/05 11:22
一、SharedPreferences存储
应用程序保存少量数据时使用,且数据格式较简单,保存的数据主要是简单类型的Key-value键值对。例如保存应用程序的各种配置信息(是否打开音效、是否使用震动)等。
SharedPreference接口本身没有提供写入数据的能力,而是通过SharedPreferences的内部接口Editor来写入数据。
1)将数据存储到SharedPreferences中
获取SharedPreferences对象的方法:
& Context类中的getSharedPreference()方法
& Activity类中的getPreferences()方法
& PreferenceManager类中的getDefaultSharedPreference()方法
// 获得SharedPreferences.Editor的对象 SharedPreferences.Editor editor = getSharedPreferences("shared",MODE_PRIVATE).edit(); //存储数据 editor.putString("name", "Happy"); editor.putInt("age", 18); //提交数据 editor.apply();
2)从SharedPreferences中读取数据
SharedPreferences sharedPreferences = getSharedPreferences("shared", MODE_PRIVATE); String name = sharedPreferences.getString("name", "" ); int age = sharedPreferences.getInt("age",0 ); boolean gender = sharedPreferences.getBoolean("male", false);
二、File文件存储
文件存储,不对存储的内容进行任何格式化处理,所有的数据都原封不动地保存文件中,因此文件存储适合存储一些简单的文本数据或二进制数据。
1)存储数据到文件
Context类提供openFileOutput()方法,用于存储数据到指定的文件中。
public void save(String inputText){ FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(inputText); }catch (IOException e) { e.printStackTrace(); }finally { if (writer != null){ try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }
2)从文件中读取数据
Context类提供openFileInput()方法,用于从文件中读取数据。
public String load(){ FileInputStream inputStream = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { inputStream = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(inputStream)); String line = " "; while ((line = reader.readLine()) != null){ content.append(line); } }catch (IOException e) { e.printStackTrace(); }finally { if (reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString(); }
三、SQLite数据库存储
Android中创建数据库的步骤:
1)创建一个类继承SQLiteOpenHelper
2)创建数据库名字和数据库版本的常量
3)创建构造函数
4)实现onCreate()方法
5)实现onUpgrade()方法
public class PetDbHelper extends SQLiteOpenHelper { public static final String LOG_TAG = PetDbHelper.class.getName(); //数据库名字 private static final String DATABASE_NAME = "shelter.db"; //数据库版本,如果更新了数据库须改变数据库版本 private static final int DATABASE_VERSION = 1; //构造函数 用来实例化PetDbHelper public PetDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } /** * 数据库第一次创建的时候调用 * @param db */ @Override public void onCreate(SQLiteDatabase db) { String SQL_CREATE_PETS_TABLE = "CREATE TABLE " + PetContract.PetEntry.TABLE_NAME +"(" + PetContract.PetEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + PetContract.PetEntry.COLUMN_PET_GENDER + " INTEGER NOT NULL, " + PetContract.PetEntry.COLUMN_PET_NAME + " TEXT NOT NULL, " + PetContract.PetEntry.COULMN_PET_BREED + " INTEGER NOT NULL, " + PetContract.PetEntry.COLUMN_PET_WEIGHT + " INTEGER NOT NULL DEFAULT 0 );"; db.execSQL(SQL_CREATE_PETS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
然后在Activity中实现数据库创建的操作
(ps,补充,SQLiteOpenHelper 中两个非常重要的实例方法,getWritableDatabase() 和 getReadableDatabase(),用来创建或者打开一个现有数据库,并返回一个可对数据库进行进行读写操作的对象。不同的是,如果磁盘已满,getReadableDatabase()方法返回的对象以只读方式打开数据库,getWritableDatabase()则抛出异常。)
PetDbHelper mDbHelper = new PetDbHelper(this);SQLiteDatabase db = mDbHelper.getWritableDatabase();
1)在数据库中插入数据
ContentValues values = new ContentValues(); values.put(PetContract.PetEntry.COLUMN_PET_NAME,"Toto"); values.put(PetContract.PetEntry.COULMN_PET_BREED,"Terrier"); values.put(PetContract.PetEntry.COLUMN_PET_GENDER, PetContract.PetEntry.GENDER_FEMALE); values.put(PetContract.PetEntry.COLUMN_PET_WEIGHT,7); db.insert(PetContract.PetEntry.TABLE_NAME,null,values);
2)从数据库中读取数据
从数据库读取数据,需要使用query()方法,传递需要查询的条件。查询后返回一个Cursor对象
Cursor类:
Cursor代表数据库中各行内容的对象,返回的Cursour对象包含了查询结果的所有内容。注意Cursor使用完毕后必须关闭,否则会出现内存泄漏。
具体使用,示例代码:
SQLiteDatabase db = petDbHelper.getReadableDatabase(); String[] projection = { PetEntry._ID, PetEntry.COLUMN_PET_NAME, PetEntry.COLUMN_PET_BREED, PetEntry.COLUMN_PET_GENDER, PetEntry.COLUMN_PET_WEIGHT };Cursor cursor = db.query( PetEntry.TABLE_NAME, // The table to query projection, // The columns to return null, // The columns for the WHERE clause null, // The values for the WHERE clause null, // Don't group the rows null, // Don't filter by row groups null); // The sort order
3)删除数据库中的信息
SQL Injection(SQL注入):随着B/S模式应用开发的发展,使用这
种模式编写应用程序的程序员越来越多,但由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码时没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户提交一段数据库查询代码,根据程序返回的结构,获得某些想得知的数据,这就是所谓的SQL注入。
SQLiteDatabase db = petDbHelper.getReadableDatabase(); String selection = PetEntry._ID + " LIKE ?"; String[] selectionArgs = {String.valueOf(selection) }; db.delete(PetEntry.TABLE_NAME,selection,selectionArgs);
4)更新数据库
当需要修改数据库中的某些数据时,使用update()方法。update结合了插入与删除语法。
SQLiteDatabase db = petDbHelper.getReadableDatabase();ContentValues values = new ContentValues();values.put(PetEntry.COLUMN_TABLE_NAME, title);String selection = PetEntry._ID + " LIKE ?";db.update(PetEntry.COLUMN_TABLE_NAME, values, selection);
详细的数据库笔记:http://www.jianshu.com/p/ea41eacfcbed
- Android数据存储概述
- android数据存储_概述
- Android数据加密概述
- PostgreSQL的数据存储(一)---概述
- [数据存储]概述以及文件FileManager
- Android | Android数据存储
- Android数据存储--网络存储
- Android数据存储:File存储
- Android 数据存储--文件存储
- android 数据存储-文件存储
- Android数据存储----File 存储
- Android数据传递相关内容概述
- Android的数据存储
- Android数据存储
- Android数据存储
- Android 数据存储
- Android数据存储
- Android数据存储
- centos 安装docker
- 热修复原理分析
- 队列
- Write operations are not allowed in read-only mode (FlushMode.MANUAL)错误解决
- POJ1795_DNA Laboratory_状压DP
- Android数据存储概述
- c++ const 变量基础
- opencv3_java 图像检测人脸图像CascadeClassifier DetectObjects lbpcascade_frontalface
- Nginx
- Android集成第三方app的两种方式
- Oracle学习笔记一
- Hibernate常见优化策略
- Bootstrap3.0学习第二十六轮(JavaScript插件——图片轮播)
- 包含激活函数的多层神经元网络及matlab实现