一、文件操作
1.将文件写入SD卡
//获取写入的路径及文件名称
File file =new File(Environment.getExternalStorageDirectory(),name);
FileOutPutStream fos =new FileOutPutStream(file);
//写入内容
fos.write(content.getBytes());
但是,最好是检测一下手机中内存卡是否可用。在MainActivity的onResume()方法中://检测手机中的内存卡是否装载
boolean isMounted =Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED)?true:false;
//根据SD卡是否装载来确定按钮是否可用
saveSD.setEnabled(isMounted);
两个注意事项:1.在文件写入写出操作时注意声明异常或者直接try catch环绕
2.在写入外存储设备时需要获得写入外存储设备的权限,在Manifest中声明即可
2.将文件写入Rom
总共两步:
FileOutputStream fos =Context.openFileOutput(name,mode);
fos.write(content.getBytes());
三个注意:
1.不需要声明权限
2.mode总共有四种,如果想设置成私有属性,即为Context.MODE_PRIVATE,同时此程序外的其他程序将不能访问到数据
3.如果一个类继承自Activity,Context等等属于Context的类,那么openFileOutPut()前面可省略context。当然如果一个类没有继承属于Context类,那么如果想用这个方法需要构造函数传进来Context
二.SharedPreferences操作
为什么要用SharedPreferences(接口),因为它是数据的持久化操作数据可以被保存起来,程序关闭后再打开数据仍然存在,否则我们用Map就可以实现了。与Map一样,它采用的是键值对的存储方式
四步:获取SharedPreferences 对象,返回Editor编辑器,放入数据,提交(类似于Transaction的过程)
SharedPreferences sp =getSharedPreferences(name,mode);//指定文件名和mode
Editor editor = sp.edit(); //获取编辑器
editor.putString("key","value"); //放入数据
editor.commit(); //提交数据
sp.getString("key",""); // 获取数据,第二个参数 //为默认值,如果没有默认值,则写“”就可以了
注意,放数据是Editor对象放入,取数据是SharedPreferences对象取出。
三、SQLite数据库的操作
1.用SQL语句进行创建数据库以及增删改查(包括查询数量,查询所有,分页查询)
1.1创建数据库
1.新建类(此处为DBOpenHelper)继承自SQLiteOpenHelper ,重写构造方法(四个参数),重写onCreate()和 onUpgrade()方法(一个用来创建数据库,一个用来写数据库的升级逻辑)
2.DBOpenHelper helper = new DBOpenHelper(context,name,null,version);
helper.getWriteabDatabase(); //至此数据库创建成功
1.2 增、删、改
逻辑都很简单,获得SQLiteDatabase对象,然后执行SQL语句,之后关闭SQL
//假设上面已经创建了一个Person表,里面有三列,分别是id ,name ,balance
public void insertDB(Person p){ //插入数据----->>增
SQLiteDatabase db = helper.getWriteableDatabase();
db.execSQL("INSERT INTO person(name,balance) VALUES(?,?)",new Object[]{p.getName(),p.getBalance()});
db.close();
}
public void deleteDB(int balance){ //删除数据------>>删
//根据资金的多少进行删除操作
.... //获得db,同上
db.exec("DELETE FROM person WHERE balance<?",new Object[]{balance};
db.close();}
1.3 查(查一个,查所有,查数据总数,查分页)
2.另外一种增删改查//根据id返回一个Person对象 public Person qureyDb(int id){ SQLiteDatabase db = helper.getReadableDatabase(); //获取Cursor对象 Cursor c = db.rawQuery("SELECT name,balance FROM person WHERE id =?", new String[]{id + ""}); Person p = null; if(c.moveToNext()) { //根据列名获取列所在的索引,通过getString,getInt取值,进而得到一个Person对象 p = new Person(id,c.getString(c.getColumnIndex("name")), c.getInt(1)); } c.close(); db.close(); return p; } //将所有的数据查询出来,放在一个列表中 public List<Person> queryAll(){ SQLiteDatabase db = helper.getReadableDatabase(); //没有条件,后面的值写null Cursor c = db.rawQuery("SELECT id,name,balance FROM person", null); Person p = null; List<Person> persons = new ArrayList<Person>(); while(c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; } //分页查询,查询第几页,以及每页有多少条数据 public List<Person> queryPage(int num,int capacity){ //获取起始索引 int start = (num-1)*capacity; int end = start +capacity; SQLiteDatabase db = helper.getReadableDatabase(); Cursor c = db.rawQuery("SELECT id,name,balance FROM person LIMIT ?,?", new String[]{start+"",end+""}); Person p = null; List<Person> persons = new ArrayList<Person>(); while(c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; } //查询表中数据总条数 public int QueryCount(){ SQLiteDatabase db = helper.getReadableDatabase(); Cursor c = db.rawQuery("SELECT COUNT(*) FROM person", null); c.moveToNext(); int count = c.getInt(0); return count; }
和上面完全用SQL语句不同,这里是SQLiteDatabase对象直接执行insert(),delete(),update(),query(),需要注意的就是参数问题。注意对比与执行SQL语句的不同,就是将关键字(像COUNT WHERE SELECT省略),将我们自己写的东西变成参数作为各个方法中所对应的参数值。另,其中涉及ContentValues,它和Map类似,可以存储键值对,放进数据。下面是代码://插入操作 public void dbInsert(Person p){ SQLiteDatabase db = helper.getWritableDatabase(); //db.execSQL("insert into person(name,balance) values(?,?)",new Object[]{p.getName(),p.getBalance()}); //获取ContentValues对象 ContentValues values = new ContentValues(); values.put("name",p.getName()); values.put("balance",p.getBalance()); //对比db.execSQL("insert into person(name,balance) values(?,?)",new Object[]{p.getName(),p.getBalance()}); db.insert("person", null, values);//(Table name,null,ContentValues values) db.close(); } //删除操作 public void delete(int id){ SQLiteDatabase db = helper.getWritableDatabase(); //对比db.execSQL("delete from person where id =?",new Object[]{id}); //注意括号里的参数(Table name,Whereclause,String[] whereArgs) db.delete("person", "id=?", new String[]{id + ""}); db.close(); } //更改操作 public void update(Person p){ SQLiteDatabase db = helper.getWritableDatabase(); //db.execSQL("update person SET name=?,balance=? Where id=?",new Object[]{p.getName(), p.getBalance(),p.getId()}); ContentValues values = new ContentValues(); values.put("name",p.getName()); values.put("balance",p.getBalance()); //根据括号里的参数来写 db.update("person", values, "id=?", new String[]{p.getId() + ""}); db.close(); } public Person dbquery(int id){ SQLiteDatabase db = helper.getReadableDatabase(); Person p = null; //Cursor c = db.rawQuery("SELECT name,balance FROM person WHERE id =?", new String[]{id + ""}); Cursor c = db.query("person",new String[]{"name","balance"},"id=?",new String[]{id+""},null,null,null); if(c.moveToNext()){ p= new Person(id,c.getString(c.getColumnIndex("name")),c.getInt(1)); } c.close(); db.close(); return p; } public List<Person> dbQueryAll(){ SQLiteDatabase db = helper.getReadableDatabase(); List<Person> persons = new ArrayList<Person>(); Person p = null; Cursor c = db.query("person",null,null,null,null,null,null,null); while(c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; } //查询总数据条数 public int queryCount(){ SQLiteDatabase db = helper.getReadableDatabase(); //将COUNT(*)作为一列 Cursor c = db.query("person", new String[]{"COUNT(*)"}, null, null, null, null, null); c.moveToNext(); int count = c.getInt(0); c.close(); db.close(); return count; } public List<Person> queryPage(int num,int capacity){ SQLiteDatabase db = helper.getReadableDatabase(); int start = (num-1)*capacity; int end = start +capacity; // db.execSQL("select id,name,balance from person limit ?,?",new String[]{start+"",end+""}); //调用query的带有limit的重载方法 Cursor c = db.query("person",null,null,null,null,null,null,start+","+end); List<Person> persons = new ArrayList<Person>(); Person p = null; while (c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; }