Android基础——数据持久化存储
2016-07-08 20:40
561 查看
数据持久化存储
文件存储
数据保存
数据读取
键值对存储
数据保存
数据读取
数据库存储
数据库创建
增加数据
更新数据
删除数据
查询数据
使用事物
升级数据库
内容来自于第一行代码中数据持久化存储这一章
第一个参数:文件名 默认保存到 /data/data/包名/files/
第二个参数:文件操作方式 Context.MODE_PRIVATE(覆盖方式) Context.MODE_APPEND(附加方式,没有就创建文件)
Android4.2中废弃了MODE_WORLD_READABLE MODE_WORLD_WRITEABLE
注意:
1、TextUitls.isEmpty( )一次检查字符串两种空值 “”与null
2、StringBuffer与StringBuilder的区别
StringBuffer不是线程同步的,所以不是线程安全的,但比StringBuilder速度快
StringBuilder是线程同步的,所以是线程安全的
Context类提供getSharedPreferences( )方法
文件存储在 /data/data/share_prefs/目录下
Context.getSharedPreferences( )
第一个参数:文件名
第二个参数:存储模式 Context.MODE_PRIVATE Context.MODE_MULTI_PROCESS
Android4.2版本中废弃了Context.MODE_WORLD_READABLE Context.MODE_WORLD_WIRTEABLE
Activity类提供getPreferences( )方法
只有一个参数,即操作模式。保存的文件名即Activity的类名
PreferenceManager类提供getDefaultSharedPreferences( )
只接收一个Context参数,静态方法,保存的文件名即应用程序的包名
文件存储
数据保存
数据读取
键值对存储
数据保存
数据读取
数据库存储
数据库创建
增加数据
更新数据
删除数据
查询数据
使用事物
升级数据库
内容来自于第一行代码中数据持久化存储这一章
数据持久化存储
文件存储
数据保存
Context.openFileOutput( )方法 用于文件输出第一个参数:文件名 默认保存到 /data/data/包名/files/
第二个参数:文件操作方式 Context.MODE_PRIVATE(覆盖方式) Context.MODE_APPEND(附加方式,没有就创建文件)
Android4.2中废弃了MODE_WORLD_READABLE MODE_WORLD_WRITEABLE
public class MainActivity extends Activity { private EditText edit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (EditText) findViewById(R.id.edit); } @Override protected void onDestroy() { super.onDestroy(); String inputText = edit.getText().toString(); save(inputText); } 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 { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
数据读取
Context.openFileInput( )方法 用于文件输入public class MainActivity extends Activity { private EditText edit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (EditText) findViewById(R.id.edit); String inputText = load(); if (!TextUtils.isEmpty(inputText)) { edit.setText(inputText); edit.setSelection(inputText.length()); Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show(); } } …… public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in)); 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(); } }
注意:
1、TextUitls.isEmpty( )一次检查字符串两种空值 “”与null
2、StringBuffer与StringBuilder的区别
StringBuffer不是线程同步的,所以不是线程安全的,但比StringBuilder速度快
StringBuilder是线程同步的,所以是线程安全的
键值对存储
SharedPreferences使用键值对的方式来存储数据,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候可以通过这个键把相应的值取出来。Context类提供getSharedPreferences( )方法
文件存储在 /data/data/share_prefs/目录下
Context.getSharedPreferences( )
第一个参数:文件名
第二个参数:存储模式 Context.MODE_PRIVATE Context.MODE_MULTI_PROCESS
Android4.2版本中废弃了Context.MODE_WORLD_READABLE Context.MODE_WORLD_WIRTEABLE
Activity类提供getPreferences( )方法
只有一个参数,即操作模式。保存的文件名即Activity的类名
PreferenceManager类提供getDefaultSharedPreferences( )
只接收一个Context参数,静态方法,保存的文件名即应用程序的包名
数据保存
public class MainActivity extends Activity { private Button saveData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saveData = (Button) findViewById(R.id.save_data); saveData.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit(); editor.putString("name", "Tom"); editor.putInt("age", 28); editor.putBoolean("married", false); editor.commit(); } }); } }
数据读取
public class MainActivity extends Activity { private Button saveData; private Button restoreData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saveData = (Button) findViewById(R.id.save_data); restoreData = (Button) findViewById(R.id.restore_data); …… restoreData.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE); String name = pref.getString("name", ""); int age = pref.getInt("age", 0); boolean married = pref.getBoolean("married", false); Log.d("MainActivity", "name is " + name); Log.d("MainActivity", "age is " + age); Log.d("MainActivity", "married is " + married); } }); } }
数据库存储
数据库创建
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text)"; private Context mContext; public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } public class MainActivity extends Activity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1); Button createDatabase = (Button) findViewById(R.id.create_database); createDatabase.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dbHelper.getWritableDatabase(); } }); } }
增加数据
public class MainActivity extends Activity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); …… Button addData = (Button) findViewById(R.id.add_data); addData.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); // 开始组装第一条数据 values.put("name", "The Da Vinci Code"); values.put("author", "Dan Brown"); values.put("pages", 454); values.put("price", 16.96); db.insert("Book", null, values); // 插入第一条数据 values.clear(); // 开始组装第二条数据 values.put("name", "The Lost Symbol"); values.put("author", "Dan Brown"); values.put("pages", 510); values.put("price", 19.95); db.insert("Book", null, values); // 插入第二条数据 } }); } }
更新数据
public class MainActivity extends Activity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); …… Button updateData = (Button) findViewById(R.id.update_data); updateData.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("price", 10.99); db.update("Book", values, "name = ?", new String[] { "The DaVinci Code" }); } }); } }
删除数据
public class MainActivity extends Activity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); …… Button deleteButton = (Button) findViewById(R.id.delete_data); deleteButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("Book", "pages > ?", new String[] { "500" }); } }); } }
查询数据
public class MainActivity extends Activity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); …… Button queryButton = (Button) findViewById(R.id.query_data); queryButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); // 查询Book表中所有的数据 Cursor cursor = db.query("Book", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { // 遍历Cursor对象,取出数据并打印 String name = cursor.getString(cursor. getColumnIndex("name")); String author = cursor.getString(cursor. getColumnIndex("author")); int pages = cursor.getInt(cursor.getColumnIndex("pages")); double price = cursor.getDouble(cursor.getColumnIndex("price")); Log.d("MainActivity", "book name is " + name); Log.d("MainActivity", "book author is " + author); Log.d("MainActivity", "book pages is " + pages); Log.d("MainActivity", "book price is " + price); } while (cursor.moveToNext()); } cursor.close(); } }); } }
使用事物
public class MainActivity extends Activity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); …… Button replaceData = (Button) findViewById(R.id.replace_data); replaceData.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); // 开启事务 try { db.delete("Book", null, null); if (true) { // 在这里手动抛出一个异常,让事务失败 throw new NullPointerException(); } ContentValues values = new ContentValues(); values.put("name", "Game of Thrones"); values.put("author", "George Martin"); values.put("pages", 720); values.put("price", 20.85); db.insert("Book", null, values); db.setTransactionSuccessful(); // 事务已经执行成功 } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); // 结束事务 } } }); } }
升级数据库
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text, " + "category_id integer)"; public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement, " + "category_name text, " + "category_code integer)"; public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion) { case 1: db.execSQL(CREATE_CATEGORY); case 2: db.execSQL("alter table Book add column category_id integer"); default: } } }
相关文章推荐
- GenyMotion 配合 Android Studio 的安装
- 学习网址记录
- Android之仿优酷圆形菜单
- Android中ListView的自定义Adapter监听Item中Button,实现跳转到一个新的Activity
- Android倒计时实现及Timer和TimerTask的使用
- Android清除本地数据缓存代码案例
- Android Loader解析
- Activity中的Intent对象
- BindService() 绑定方式开启服务
- 启用安卓虚拟机报错问题
- Fragment学习之旅(一)
- android studio for android learning (十三) 一个简单的图片查看器示例
- 提高Android Studio 的编译速度
- 线程池
- 网易云音乐Android版使用的开源组件
- Android开发的四大组件
- Android之自定义组合控件
- android 自定义View(1)
- can't rename root module
- Android 简单的介绍下 RecyclerView