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; @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(); <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;不要删除先前的表,而是在先前的表上做修改或者添加的操作。