sdCard:默认路径在 /storage/sdcard/...

Android支持OpenFileOutput和openFileInput方式访问手机存储器上的文件。
Context提供了如下两个方法来打开应用程序的数据文件夹里的文件IO流:
FileInputStream openFileInput(String name):打开应用程序的数据文件夹下的name文件对应的输入流
FileOutStream openFileOutput(String name,int mode):打开应用程序的数据的文件夹下的name文件对应输出流,其中第二个方法的第二个参数是指定打开文件的模式,该模式支持如下值:
Context.MODE_PRIVATE    =  0
Context.MODE_APPEND    =  32768 \\追加
Context.MODE_WORLD_READABLE =  1 \\可读
Context.MODE_WORLD_WRITEABLE =  2 \\可写
除此之外,Context还提供了如下几个方法来访问应用程序的数据文件夹:
getDir(String name,int mode) 在应用程序的数据文件夹下获取或者创建name对应的子目录
File getFilesDir() 获取该应用程序的数据文件夹的绝对路径
String[] fileList() 返回该应用程序的数据文件夹下的指定文件
读写SD卡上的文件的步骤如下:
1、 Environment的getExternalStorageDirectory方法来判断手机上是否插了SD卡,并且应用程序具有读写SD卡的权限。Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
2、调用Environment的getExternalStorageDirectory方法来获得外部存储卡,也就是SD卡的路径
3、使用FileInputStream、FileOutputStream、FileReader和FileWriter读写SD卡的内容
为了能读写SD卡上的数据,必须在应用程序的清单文件中添加读写SD卡的权限

<!-- 允许用户创建和删除sdcard卡上的内容 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

<!-- 允许用户往sdcard卡上写入的内容 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

为了能单元测试,必须在应用程序的清单文件中添加工具instrument并在清单文件应用标签中注册单元测试库(图形化界面添加方便)

<!-- 允许用户单元测试 -->
<instrumentation android:targetPackage="com.example.android_06storage" android:name="android.test.InstrumentationTestRunner"></instrumentation>
<!-- 添加在应用标签中 -->
<uses-library android:name="android.test.runner"/>
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android_06storage"
android:versionCode=""
android:versionName="1.0" > <uses-sdk
android:minSdkVersion=""
android:targetSdkVersion="" />
<!-- 添加读写授权 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<instrumentation android:targetPackage="com.example.android_06storage" android:name="android.test.InstrumentationTestRunner"></instrumentation> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 添加 -->
<uses-library android:name="android.test.runner"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

读取sdCard代码:

 package com.example.android_06storage;

 import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import android.content.Context;
import android.os.Environment; public class FileService { private Context context;
public FileService() {
// TODO Auto-generated constructor stub
}
public FileService(Context context) {
// TODO Auto-generated constructor stub
this.context=context;
} /**
*
* @param fileName文件名
* @param Content文件内容
* @return
* @throws Exception
*/
public boolean saveContentToSdcard(String fileName,String Content) throws Exception{
boolean flag=false;
FileOutputStream fileOutputStream=null;
File file=new File(Environment.getExternalStorageDirectory(),fileName);
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
try {
fileOutputStream=new FileOutputStream(file);
fileOutputStream.write(Content.getBytes());
flag=true;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(fileOutputStream!=null)
fileOutputStream.close();
} }
return flag;
}
public String getDataFromSdcard(String fileName){
FileInputStream fileInputStream=null;
ByteArrayOutputStream out=new ByteArrayOutputStream();
File file=new File(Environment.getExternalStorageDirectory(),fileName);
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
try {
fileInputStream=new FileInputStream(file);
int len=;
byte[] data=new byte[];
while((len=fileInputStream.read(data))!=-){
out.write(data, , len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fileInputStream!=null)
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return new String (out.toByteArray()); }
}

测试类:

 package com.example.android_06storage;

 import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log; public class myTest extends AndroidTestCase { private static final String TAG="myTest";
public myTest() {
// TODO Auto-generated constructor stub
} public void saveFile() throws Exception{
Context context=getContext();
FileService fileService=new FileService(context);
boolean flag=fileService.saveContentToSdcard("hello.txt", "你好 阳光");
System.out.println(flag);
Log.i(TAG, "---->>"+flag); }
public void readFile() throws Exception{
Context context=getContext();
FileService fileService=new FileService(context);
String msg=fileService.getDataFromSdcard("hello.txt");
System.out.println(msg);
Log.i(TAG, "---->>"+msg); }
}

读取raw文件夹中获取文件:InputStream in = getResources().openRawResource(R.raw.a);

读取asset文件夹中获取文件:

InputStream in = getResources().getAssets().open(fileName);
EncodingUtils.getString(buffer, “UTF-8”);//解决中文乱码的问题
ØAndroid 获取assets的绝对路径 第一种方法:String path = "file:///android_asset/文件名";
                                            第二种方法:InputStream abpath = getClass().getResourceAsStream("/assets/文件名");
注意:资源文件只能读不能写
sharedPreference:读写key-value对的SharedPreferences参数共享的文件存放方式。默认路径在 /data/data/...
在实际的软件界面设计中,我们需要保存一些系统的参数,例如屏幕大小和亮度、高度等。在没有数据的情况下我们把这些参数设置到参数共享的文件中以便下次访问
SharedPreferences用法的基本步骤:
step1、SharedPreferences preferences =context.getSharedPreferences("login",Context.MODE_PRIVATE);
step2、通过SharedPreferences .edit方法获得一个Editor对象。
step3、通过SharedPreferences 的Editor.putXXX方法放置键值对保存到文件中。
step4、最后调用commit方法保存文件。
注意:只有事务结束之后才能提交。
存取共享文件中的内容代码:
 package com.example.android_06storage_sharedpreference;

 import java.util.HashMap;
import java.util.Map; import android.content.Context;
import android.content.SharedPreferences; public class SharedPreference { private Context context; public SharedPreference() {
// TODO Auto-generated constructor stub
} public SharedPreference(Context context) {
// TODO Auto-generated constructor stub
this.context=context;
}
public boolean SaveKVmessage(String name,String pwd){
boolean flag=false;
SharedPreferences share=context.getSharedPreferences("userinfo", context.MODE_PRIVATE);
//对数据进行编辑
SharedPreferences.Editor editor=share.edit();
editor.putString("name", name);
editor.putString("password", pwd);
//完成编辑将数据持久化存储到存储介质中
flag=editor.commit();
return flag;
}
public Map<String,Object> ReadKVmessage(){
Map<String,Object> map=new HashMap<String, Object>(); SharedPreferences share=context.getSharedPreferences("userinfo", context.MODE_PRIVATE); String name=share.getString("name", "");
String password=share.getString("password", ""); map.put("name", name);
map.put("password", password); return map;
}
}

测试类:

 package com.example.android_06storage_sharedpreference;

 import java.util.Map;

 import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log; public class MyTest extends AndroidTestCase { private static final String TAG="MyTest";
public MyTest(){ }
public void save(){
Context context=getContext();
SharedPreference sharedPreference=new SharedPreference(context);
boolean flag=sharedPreference.SaveKVmessage("admin", "");
Log.i(TAG, "--->>"+flag);
}
public void Read(){
Context context=getContext();
SharedPreference sharedPreference=new SharedPreference(context);
Map<String,Object> map=sharedPreference.ReadKVmessage();
Log.i(TAG, "--->>"+map.toString());
}
}

SQLite数据库的存储:默认路径在 /data/data/...

SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:

1、轻量级:SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也很小。

2、独立性:SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。

3、隔离性:SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。

4、跨平台:SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。

5、多语言接口:SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。

6、安全性:SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。

创建一个类,继承SQLiteOpenHelper

  Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。

SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

  构造函数,调用父类 SQLiteOpenHelper 的构造函数

  onCreate()方法;// TODO 创建数据库后,对数据库的操作

  onUpgrage()方法。// TODO 更改数据库版本的操作

  当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

  操作数据库的最佳实践是创建一个辅助类,例如联系人模块

  class ContactsDatabaseHelper extends SQLiteOpenHelper

项目目录如下:

方法1:对于有sql经验的人而言,这种方式比较适合:

增删改 db.execSQL(sql)  查db.rawQuery(sql, params);

首先在db下创建一个DBOpenHelper类继承SQLiteOpenHelper

 package com.example.android_06sotrage_sqlite.db;

 import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { private static String name="mydb.db";//数据库名称
private static int version=;//数据库版本号 public DBOpenHelper(Context context) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
//虽然定义了数据库的名称和版本号,
//但直到调用getReadableDatabase或getWritableDatabase的时候才最终生成数据库 } /**
* 当数据库创建的时候 是第一次被执行
* 通常用来完成对数据库表的创建
*/
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//支持的数据类型:整型数据 字符串 日期类型 二进制数据类型
String sql="create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
//原来版本创建时 是1 如果设置成>1的数字,则会更新数据库版本,这里只需要执行alter语句就行
String sql="alter table person add sex varchar(8)";
db.execSQL(sql);
} }

然后在service包下建接口类

 package com.example.android_06sotrage_sqlite.service;

 import java.util.List;
import java.util.Map; public interface PersonService { public boolean add(Object[] params);
public boolean del(Object[] params);
public boolean mod(Object[] params);
public Map<String,String> find(String[] params);
public List<Map<String,String>> findMore(String[] params);
}

第三在dao包下建实现类

 package com.example.android_06sotrage_sqlite.dao;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
import com.example.android_06sotrage_sqlite.service.PersonService; public class PersonDao implements PersonService { private DBOpenHelper helper=null;
public PersonDao(Context context) {
// TODO Auto-generated constructor stub
helper=new DBOpenHelper(context);
} @Override
public boolean add(Object[] params) {
// TODO Auto-generated method stub
boolean flag=false;
//SQLiteDatabase实现数据库的增删改
SQLiteDatabase database=null;
try {
String sql="insert into person(name,address) values(?,?)";
database=helper.getWritableDatabase();
database.execSQL(sql,params);
flag=true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return flag;
} @Override
public boolean del(Object[] params) {
// TODO Auto-generated method stub
boolean flag=false;
SQLiteDatabase database=null;
try {
String sql="delete from person where id=?";
database=helper.getWritableDatabase();
database.execSQL(sql,params);
flag=true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return flag;
} @Override
public boolean mod(Object[] params) {
// TODO Auto-generated method stub
boolean flag=false;
SQLiteDatabase database=null;
try {
String sql="update person set name=?,address=? where id=?";
database=helper.getWritableDatabase();
database.execSQL(sql,params);
flag=true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return flag;
} @Override
public Map<String, String> find(String[] params) {
// TODO Auto-generated method stub
Map<String, String> map=new HashMap<String, String>();
SQLiteDatabase database=null;
try {
String sql="select * from person where id=?";
database=helper.getReadableDatabase();
Cursor cursor=database.rawQuery(sql, params);
//数据库列的个数
int col=cursor.getColumnCount();
while(cursor.moveToNext()){
for (int i = ; i < col; i++) {
String col_name=cursor.getColumnName(i);
String col_val=cursor.getString(cursor.getColumnIndex(col_name));
if(col_val==null)
col_val="";
map.put(col_name, col_val);
} }
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return map;
} @Override
public List<Map<String, String>> findMore(String[] params) {
// TODO Auto-generated method stub
List<Map<String, String>> list=new ArrayList<Map<String,String>>();
SQLiteDatabase database=null;
try {
String sql="select * from person";
database=helper.getReadableDatabase();
Cursor cursor=database.rawQuery(sql, params);
//数据库列的个数
int col=cursor.getColumnCount();
while(cursor.moveToNext()){
Map<String, String> map=new HashMap<String, String>();
for (int i = ; i < col; i++) {
String col_name=cursor.getColumnName(i);
String col_val=cursor.getString(cursor.getColumnIndex(col_name));
if(col_val==null)
col_val="";
map.put(col_name, col_val);
}
list.add(map);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return list;
} }

最后创建测试类:

 package com.example.android_06sotrage_sqlite.test;

 import java.util.List;
import java.util.Map; import com.example.android_06sotrage_sqlite.dao.PersonDao;
import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
import com.example.android_06sotrage_sqlite.service.PersonService; public class MyTest extends android.test.AndroidTestCase{ public MyTest() {
// TODO Auto-generated constructor stub
} public void createDB(){
DBOpenHelper helper=new DBOpenHelper(getContext());
helper.getWritableDatabase();//此时才真正创建了数据库
}
public void add(){
PersonService service=new PersonDao(getContext());
Object[] params={"mlj","xinxiang"};
boolean flag=service.add(params);
System.out.println("--->>"+flag);
}
public void del(){
PersonService service=new PersonDao(getContext());
Object[] params={};
boolean flag=service.del(params);
System.out.println("--->>"+flag);
}
public void mod(){
PersonService service=new PersonDao(getContext());
Object[] params={"mlj","huojia",""};
boolean flag=service.mod(params);
System.out.println("--->>"+flag);
}
public void find(){
PersonService service=new PersonDao(getContext());
String[] params={""};
Map<String,String> map=service.find(params);
System.out.println("--->>"+map.toString());
}
public void findMore(){
PersonService service=new PersonDao(getContext());
List<Map<String,String>> list=service.findMore(null);
System.out.println("--->>"+list.toString());
}
}

方法2:对于其他人而言,这种方式比较适合,因为不用编写sql语句:

增 db.insert("表名", "列名", 值);

int insert(String table, String nullColumnHack, ContentValues values) 列名可以为空,当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),

为了防止这种情况,我们要在这里指定一个 列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

  值类似于map类型。

  返回值为int,如果不等于-1,即表示成功插入

删 db.delete("表名", "不含where的条件字句", 字句中占位符的值);

int delete (String table, String whereClause, String[] whereArgs),返回值为最终影响的行数

db.update("表名",  值,"不含where的条件字句", 字句中占位符的值);

int update (String table, ContentValues values, String whereClause, String[] whereArgs)返回值为最终影响的行数

查db.query(是否是唯一记录, "表名", 列名可以为空, 字句, 字句占位符的值, 分组可以为空, 过滤可以为空, 排序可以为空, 限制记录可以为空);

Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy,String limit)

DBOpenHelper类同上

新建接口类:

 package com.example.android_06sotrage_sqlite.service;

 import java.util.List;
import java.util.Map; import android.content.ContentValues; public interface PersonService2 { public boolean add(ContentValues values);
public boolean del(String whereClause,String[] whereArgs);
public boolean mod(ContentValues values, String whereClause, String[] whereArgs);
public Map<String,String> find(String selection,String[] selectionArgs);
public List<Map<String,String>> findMore(String selection,String[] selectionArgs);
}

第三在dao包下建实现类:

 package com.example.android_06sotrage_sqlite.dao;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
import com.example.android_06sotrage_sqlite.service.PersonService2; public class PersonDao2 implements PersonService2 { private DBOpenHelper helper=null;
public PersonDao2(Context context) {
// TODO Auto-generated constructor stub
helper=new DBOpenHelper(context);
} @Override
public boolean add(ContentValues values) {
// TODO Auto-generated method stub
boolean flag=false;
long id=-;//返回最终结果值 如果不等于-1,即表示成功插入
//SQLiteDatabase实现数据库的增删改
SQLiteDatabase database=null;
try {
database=helper.getWritableDatabase();
id=database.insert("person", null, values);
flag=(id!=-?true:false);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return flag;
} @Override
public boolean del(String whereClause,String[] whereArgs) {
// TODO Auto-generated method stub
boolean flag=false;
int count=;//最终影响的行数
SQLiteDatabase database=null;
try {
database=helper.getWritableDatabase();
count=database.delete("person", whereClause, whereArgs);
flag=(count>?true:false);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return flag;
} @Override
public boolean mod(ContentValues values, String whereClause, String[] whereArgs) {
boolean flag=false;
int count=;//最终影响的行数
SQLiteDatabase database=null;
try {
database=helper.getWritableDatabase();
count=database.update("person", values, whereClause, whereArgs);
flag=(count>?true:false);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return flag;
} @Override
public Map<String, String> find(String selection,String[] selectionArgs) {
// TODO Auto-generated method stub
Map<String, String> map=new HashMap<String, String>();
SQLiteDatabase database=null;
try {
database=helper.getReadableDatabase();
/**
* distinct 是否返回唯一值
* table name表名
* column name 设置为空 表明所有列
* selection
* selectionArgs
* groupBy null
* having null
* orderBy null
* limit null
*/
Cursor cursor=database.query(true, "person", null, selection, selectionArgs, null, null, null, null);
//数据库列的个数
int col=cursor.getColumnCount();
while(cursor.moveToNext()){
for (int i = ; i < col; i++) {
String col_name=cursor.getColumnName(i);
String col_val=cursor.getString(cursor.getColumnIndex(col_name));
if(col_val==null)
col_val="";
map.put(col_name, col_val);
}
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return map;
} @Override
public List<Map<String, String>> findMore(String selection,String[] selectionArgs) {
// TODO Auto-generated method stub
List<Map<String, String>> list=new ArrayList<Map<String,String>>();
SQLiteDatabase database=null;
try {
database=helper.getReadableDatabase();
Cursor cursor=database.query(false, "person", null, selection, selectionArgs, null, null, null, null);
//数据库列的个数
int col=cursor.getColumnCount();
while(cursor.moveToNext()){
Map<String, String> map=new HashMap<String, String>();
for (int i = ; i < col; i++) {
String col_name=cursor.getColumnName(i);
String col_val=cursor.getString(cursor.getColumnIndex(col_name));
if(col_val==null)
col_val="";
map.put(col_name, col_val);
}
list.add(map);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(database!=null)
database.close();
}
return list;
} }

最后创建测试类:

 package com.example.android_06sotrage_sqlite.test;

 import java.util.List;
import java.util.Map; import android.content.ContentValues; import com.example.android_06sotrage_sqlite.dao.PersonDao2;
import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
import com.example.android_06sotrage_sqlite.service.PersonService2; public class MyTest2 extends android.test.AndroidTestCase{ public MyTest2() {
// TODO Auto-generated constructor stub
} public void createDB(){
DBOpenHelper helper=new DBOpenHelper(getContext());
helper.getWritableDatabase();//此时才真正创建了数据库
}
public void add(){
PersonService2 service=new PersonDao2(getContext());
ContentValues values=new ContentValues();//类似于map
values.put("name", "zhh");
values.put("address", "henan");
service.add(values);
boolean flag=service.add(values);
System.out.println("--->>"+flag);
}
public void del(){
PersonService2 service2=new PersonDao2(getContext());
/**
* whereClause 条件字句
* 原来sql语句是"delete from person where id=? "
* 现在的字句不包含where关键字
* whereArgs 字句中的参数列表
*/
boolean flag=service2.del("id=?", new String[]{""});
System.out.println("--->>"+flag);
}
public void mod(){
PersonService2 service2=new PersonDao2(getContext());
ContentValues values=new ContentValues();//类似于map
values.put("name", "zhh");
values.put("address", "jiaozuo");
boolean flag=service2.mod(values, "id=?", new String[]{""});
}
public void find(){
PersonService2 service2=new PersonDao2(getContext());
Map<String,String> map=service2.find("id=?", new String[]{""});
System.out.println("--->>"+map.toString()); }
public void findMore(){
PersonService2 service2=new PersonDao2(getContext());
//select * from person
List<Map<String,String>> list=service2.findMore(null, null);
System.out.println("--->>"+list.toString());
}
}

Android 之数据存储(sdCard,sharedPreference,sqlite数据库)的更多相关文章

  1. <Android基础> (六) 数据存储 Part 3 SQLite数据库存储

    6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...

  2. Android中数据存储(三)——SQLite数据库存储数据

    当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...

  3. Android 数据存储03之SQLite

    SQLite数据存储 Android 集成了 SQLite 数据库.它存储在 /data/data/< 项目文件夹 >/databases/ 下.Android 开发中使用 SQLite ...

  4. Android本地数据存储复习

    Android本地数据存储复习 Android无论是应用层还是系统层都需要在本地保存一些数据,尤其在应用层中使用的就更为普遍,大体有这么几种:SharedPreference,file,sqlite数 ...

  5. Android实现数据存储技术

    转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...

  6. Android中数据存储(四)——ContentProvider存储数据

    目录(?)[+]   当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...

  7. 关于Android开发数据存储的方式(一)

    关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方 ...

  8. android中数据存储

    android中数据存储     Android 中存储数据的方式有五种:SQLite数据库.文件存储.内容提供者.网络.SharedPreferences(Key----value)五种存储方式. ...

  9. Android中数据存储(一)

    国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM ...

随机推荐

  1. 零碎的JS基础

    一.js的三种弹窗: 警告框            弹出警告alert() 确认框            有确认内容的框confirm()有两个值,true和false 当用户按下确认键后,打印tru ...

  2. 基于FPGA的中值滤波算法实现

    在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...

  3. BotVS趋势交易策略-RSI

    BotVS趋势交易策略-RSI, 基于Python实现. RSI简单买卖测试, 默认 70-100卖出,0-30买入 参数 代码 import math def adjustFloat(v): ret ...

  4. JavaScript 学习笔记 - Web Workers

    前言 本文仅是 Web Workers 的入门科普文章,不涉及太琐碎的知识点. 我们知道,在 Web Workers 出来之前,JavaScript 是单线程的.即使是 setTimeout 之类的看 ...

  5. 在fetch方法中添加header后遇到的预检请求问题

    今天在使用fetch方法 fetch('xxx.com',{header:{bbbbbbb:111}}) 浏览器返回的请求信息中,header变成了 :authority:koss.nocorp.me ...

  6. latex 插图排版

    LaTeX的图片插入及排版   LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文 ...

  7. asp.net MVC  Ajax.BeginForm 异步上传图片的问题

    当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流. 这就是我要说的,当使用Ajax.Be ...

  8. 从yum提示空间不足到根分区扩容

    记录一次安装软件的报错 --1261065212@qq.com         1.系统版本(VMware 虚拟机) [root@ansible-admin ~]# cat /etc/redhat-r ...

  9. 谈谈分布式版本管理工具Git

    一.主流的版本管理工具 目前在企业中比较主流的版本管理工具有:GIT.SVN.CVS等等. 二.什么是Git? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.是 L ...

  10. Flink从Kafka 0.8中读取多个Topic时的问题

    Flink提供了FlinkKafkaConsumer08,使用Kafka的High-level接口,从Kafka中读取指定Topic的数据,如果要从多个Topic读取数据,可以如下操作: 1.appl ...