一,sharedpreferences
保存的数据主要是类似于配置信息合适的数据,主要保存的数据是key-value对
方法:定义一个sharedpreferences对象,然后用.edit()方法来获取一个editor对象,editor对象可以用来执行存储和修改数据操作,每次操作都要
commit一下,而sharepreferences对象只能读取操作
ps:在 DDOM filter explorer的data目录下打不开data文件.原因是手机没有获得root权限,改为用虚拟机运行就没有该问题了,
SharedPreferences pref=getSharedPreferences("mypref",MODE_PRIVATE); //mode表示读取权限
Editor editor=pref.edit(); //调用它的EDITOR方法来获取一个editor对象
editor.putString("name","taylor");
editor.putInt("age",12);
editor.putLong("time",System.currentTimeMillis());
editor.commit(); //每进行一次操作就要提交一次
editor.remove("age");
editor.commit();
System.out.println(pref.getString("name","swift")); //取值
二、SQLite
.db.execSQL(sql) //执行任何SQL语句
db.insert(table,nullColumuHack,values) //null为默认
db.delete(table,whereClause,whereArgs)
db.update(table,values,whereClause,whrereArgs)
db.query(table,colums,selection,selectionArgs,groupBy,having,orderBy)
db.rawQuery(sql,selectionArgs) //s第二个参数为查询条件,null为默认全部把数据查出
打开或者创建数据库
SQLiteDatabase db=openOrCreateDatabase("user.db",MODE_PRIVATE,null); //数据库名字必须加后缀
插入sql语句,建表语句
db.execSQL("creat table if not exists usertb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)"); //主键可以不必写在插入语句里面
注意在定义主键名字前面必须加上_id
在新建的表格里面插入数据
db.execSQL("insert into userb (name,age,sex) values('张三',18,'女')");
更新、修改数据库里面部分值数据库
查找
Cursor c=db.rawQuery("select *from usertb",null); //游标为存储结果的集合
if(c!=null)
{
while(c.movetoNext) //无论几条数据U都要加上游标便利
{
Log.i("info","_id:"+c.getInt(c.getColumnIndex("_id")));
Log.i("info","name:"+c.getString(c.getColumnIndex("name")));
Log.i("info","sex:"+c.getInt(c.getColumnIndex("sex")));
}
c.close(); //人为释放内存对象
}
db.close();
$关于 Cursor
Cursor 是每行的集合,当执行数据库 db.rawQuery查询语句的时候会返回一个Cursor对象,所有数据库里面的数据都可以通过该Cursor来获得.
关于Cursor的重要方法:
close()
关闭游标,释放资源
copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
在缓冲区中检索请求的列的文本,将将其存储
getColumnCount()
返回所有列的总数
getColumnIndex(String columnName)
返回指定列的名称,如果不存在返回-1
getColumnIndexOrThrow(String columnName)
从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
getColumnName(int columnIndex)
从给定的索引返回列名
getColumnNames()
返回一个字符串数组的列名
getCount()
返回Cursor 中的行数
moveToFirst()
移动光标到第一行
moveToLast()
移动光标到最后一行
moveToNext()
移动光标到下一行
moveToPosition(int position)
移动光标到一个绝对的位置
moveToPrevious()
移动光标到上一行
注意:如果查询数据较小不会有内存问题,如果数据量很大,特别是里面有Blob信息时,应该保证Cursor占用内存及时被释放掉
cursor.close();
注意在最后也应该把数据库释放掉!
使用内置函数操作 //推荐
ContentValues:
用于存储一组可以被ContentResolve处理的值
SQLiteDatabase db=openOrCreateDatabase("stu.db",MODE_PRIVATE,null);
db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,task_type text,task text,date text)");
ContentValues values=new ContentValues();
values.put("task_type","我要减肥肥");
values.put("task", "今天不吃饭");
values.put("date", "2015-12-27");
long rowId=db.insert("stutb",null,values); //返回所在列的序号
values.clear(); //每次都要清空一次
values.put("task_type","我要减肥肥");
values.put("task","今天不吃饭");
values.put("date", "2015-12-27");
long rowid=db.insert("stutb",null,values); //返回所在列的序号
values.clear();
//修改和删除操作
values.put("task","我要跑步");
db.update("stu.db", values, "_id>?", new String[]{"3"}); //将id>3的任务全部改成我要跑步
db.delete("stu.db","task like ?",new String [] {"%减肥%"}); //将任务中带有减肥的字段删除
//查询
Cursor c=db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "task");
if(c!=null){
String []columns=c.getColumnNames(); //该方法返回所有类列的内容
while(c.moveToNext()){
for (String columnName:columns) {
System.out.print(c.getString(c.getColumnIndex(columnName)));
}
}
}
3.辅助类SQLiteOpenHelper总结
(学习博客 http://byandby.iteye.com/blog/836250)
1.Java:先写一个类继承SQLiteOpenHelper
/** * Created by yx on 2015/12/27. */public class MySqliteHelper extends SQLiteOpenHelper{ public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //在此方法里面创建表格和主要类型 db.execSQL("create table if not exists my_table(_id integer primary key autoincrement,task_type text,task text,date text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
2,在主函数里调用
public class MainActivity extends AppCompatActivity { MySqliteHelper mySqliteHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mySqliteHelper=new MySqliteHelper(this,"my.db",null,1); //插入 Insert(mySqliteHelper); //更新 int iiid=1; Update(mySqliteHelper,iiid); //删除 int iidd=1; Delete(mySqliteHelper,iidd); //查询 int iid=1; String text=queryData(mySqliteHelper,iid); } //插入 public void Insert(MySqliteHelper mySqliteHelper){ SQLiteDatabase db=mySqliteHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("task_type", "我要减肥"); values.put("task", "不吃晚饭"); values.put("date", "2015-12-27"); db.insert("my_table", null, values); db.close(); } //更新 public void Update(MySqliteHelper mySqliteHelper,int iiid){ SQLiteDatabase db=mySqliteHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("task_type","better"); db.update("my_table", values, "_id=?", new String[]{"iiid"}); db.close(); } //删除 public void Delete(MySqliteHelper mySqliteHelper,int iidd){ SQLiteDatabase db=mySqliteHelper.getWritableDatabase(); db.delete("my_table","_id==?",new String[]{"iidd"}); } //查询 public String queryData(MySqliteHelper mySqliteHelpe,int iid){ SQLiteDatabase db=mySqliteHelpe.getReadableDatabase(); String text=""; Cursor c=db.rawQuery("select * from my_table",null); if(c!=null){ String []columns=c.getColumnNames(); while(c.moveToNext()){ if(c.getInt(c.getColumnIndex("_id"))==iid){ break; } } for (String columnname :columns) { text=c.getString(c.getColumnIndex(columnname))+" "+text; } } c.close(); db.close(); return text; }