日拱一卒(八)

来源:互联网 发布:淘宝十大名店是谁创的 编辑:程序博客网 时间:2024/06/05 15:21

1.文件存储

openFileOutput 和 openFileInput,其中openFileOutput 有两种模式MODE_PRIVATE(新写入的内容会覆盖先前的内容)、MODE_APPEND(新写入的内容追加到原有的内容);另外两种已经被废弃:MODE_WORLD_READABLE(表示当前文件可以被其他应用读取),MODE_WORLD_WRITEABLE(表示当前文件可以被其他应用写入

2.SharedPreferences:

存储用其内部类Editor操作

3.SQlite数据库:

  • SQLiteOpenHelper中getReadableDatabase()和getWritableDatabase()区别:当数据库不可写入的时候,getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
  • 什么是事务?SQlite中如何使用事务?

事务是用来保证数据库操作的一系列操作都成功的机制,如果成功数据替换成新的,否则还原成原有的数据。

使用方式:主要三个方法

db.beginTransaction();-----------在需要开启事务的数据库一系列操作前面开启事务

db.setTransactionSuccessful();--------------在数据库一系列操作完成后标志事务成功

db.endTransaction(); ----------------标志事务结束:

public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected 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() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();<span style="color:#ff0000;">db.beginTransaction(); // 开启事务</span>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);<span style="color:#ff0000;">db.setTransactionSuccessful(); // 事务已经执行成功</span>} catch (Exception e) {e.printStackTrace();} finally {<span style="color:#ff0000;">db.endTransaction(); // 结束事务</span>}}});}}

  • 如果数据库结构存在变动,数据库升级时如何避免先前的数据丢失?

主要是对onUpgrade方法的处理,不能简单粗暴的的删除所有表,在强制onCreate;不要删除先前的表,而是在先前的表上做修改或者添加的操作。






0 0