Android 之数据存储(sdCard,sharedPreference,sqlite数据库)
sdCard:默认路径在 /storage/sdcard/...
<!-- 允许用户创建和删除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并在清单文件应用标签中注册单元测试库(图形化界面添加方便) 1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.example.android_06storage"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="16"
9 android:targetSdkVersion="21" />
10 <!-- 添加读写授权 -->
11
12 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
13 <instrumentation android:targetPackage="com.example.android_06storage" android:name="android.test.InstrumentationTestRunner"></instrumentation>
14
15 <application
16 android:allowBackup="true"
17 android:icon="@drawable/ic_launcher"
18 android:label="@string/app_name"
19 android:theme="@style/AppTheme" >
20 <!-- 添加 -->
21 <uses-library android:name="android.test.runner"/>
22 <activity
23 android:name=".MainActivity"
24 android:label="@string/app_name" >
25 <intent-filter>
26 <action android:name="android.intent.action.MAIN" />
27
28 <category android:name="android.intent.category.LAUNCHER" />
29 </intent-filter>
30 </activity>
31 </application>
32
33 </manifest>
读取sdCard代码:
1 package com.example.android_06storage;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.FileNotFoundException;
7 import java.io.FileOutputStream;
8 import java.io.IOException;
9
10 import android.content.Context;
11 import android.os.Environment;
12
13 public class FileService {
14
15 private Context context;
16 public FileService() {
17 // TODO Auto-generated constructor stub
18 }
19 public FileService(Context context) {
20 // TODO Auto-generated constructor stub
21 this.context=context;
22 }
23
24 /**
25 *
26 * @param fileName文件名
27 * @param Content文件内容
28 * @return
29 * @throws Exception
30 */
31 public boolean saveContentToSdcard(String fileName,String Content) throws Exception{
32 boolean flag=false;
33 FileOutputStream fileOutputStream=null;
34 File file=new File(Environment.getExternalStorageDirectory(),fileName);
35 if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
36 try {
37 fileOutputStream=new FileOutputStream(file);
38 fileOutputStream.write(Content.getBytes());
39 flag=true;
40 } catch (FileNotFoundException e) {
41 // TODO Auto-generated catch block
42 e.printStackTrace();
43 }
44 finally{
45 if(fileOutputStream!=null)
46 fileOutputStream.close();
47 }
48
49 }
50 return flag;
51 }
52 public String getDataFromSdcard(String fileName){
53 FileInputStream fileInputStream=null;
54 ByteArrayOutputStream out=new ByteArrayOutputStream();
55 File file=new File(Environment.getExternalStorageDirectory(),fileName);
56 if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
57 try {
58 fileInputStream=new FileInputStream(file);
59 int len=0;
60 byte[] data=new byte[1024];
61 while((len=fileInputStream.read(data))!=-1){
62 out.write(data, 0, len);
63 }
64 } catch (FileNotFoundException e) {
65 // TODO Auto-generated catch block
66 e.printStackTrace();
67 } catch (IOException e) {
68 // TODO Auto-generated catch block
69 e.printStackTrace();
70 }finally{
71 if(fileInputStream!=null)
72 try {
73 fileInputStream.close();
74 } catch (IOException e) {
75 // TODO Auto-generated catch block
76 e.printStackTrace();
77 }
78 }
79 }
80 return new String (out.toByteArray());
81
82 }
83 }
测试类:
1 package com.example.android_06storage;
2
3 import android.content.Context;
4 import android.test.AndroidTestCase;
5 import android.util.Log;
6
7 public class myTest extends AndroidTestCase {
8
9 private static final String TAG="myTest";
10 public myTest() {
11 // TODO Auto-generated constructor stub
12 }
13
14 public void saveFile() throws Exception{
15 Context context=getContext();
16 FileService fileService=new FileService(context);
17 boolean flag=fileService.saveContentToSdcard("hello.txt", "你好 阳光");
18 System.out.println(flag);
19 Log.i(TAG, "---->>"+flag);
20
21 }
22 public void readFile() throws Exception{
23 Context context=getContext();
24 FileService fileService=new FileService(context);
25 String msg=fileService.getDataFromSdcard("hello.txt");
26 System.out.println(msg);
27 Log.i(TAG, "---->>"+msg);
28
29 }
30 }
读取raw文件夹中获取文件:InputStream in = getResources().openRawResource(R.raw.a);
读取asset文件夹中获取文件:
1 package com.example.android_06storage_sharedpreference;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import android.content.Context;
7 import android.content.SharedPreferences;
8
9 public class SharedPreference {
10
11 private Context context;
12
13 public SharedPreference() {
14 // TODO Auto-generated constructor stub
15 }
16
17 public SharedPreference(Context context) {
18 // TODO Auto-generated constructor stub
19 this.context=context;
20 }
21 public boolean SaveKVmessage(String name,String pwd){
22 boolean flag=false;
23 SharedPreferences share=context.getSharedPreferences("userinfo", context.MODE_PRIVATE);
24 //对数据进行编辑
25 SharedPreferences.Editor editor=share.edit();
26 editor.putString("name", name);
27 editor.putString("password", pwd);
28 //完成编辑将数据持久化存储到存储介质中
29 flag=editor.commit();
30 return flag;
31 }
32 public Map<String,Object> ReadKVmessage(){
33 Map<String,Object> map=new HashMap<String, Object>();
34
35 SharedPreferences share=context.getSharedPreferences("userinfo", context.MODE_PRIVATE);
36
37 String name=share.getString("name", "");
38 String password=share.getString("password", "");
39
40 map.put("name", name);
41 map.put("password", password);
42
43 return map;
44 }
45 }
测试类:
1 package com.example.android_06storage_sharedpreference;
2
3 import java.util.Map;
4
5 import android.content.Context;
6 import android.test.AndroidTestCase;
7 import android.util.Log;
8
9 public class MyTest extends AndroidTestCase {
10
11 private static final String TAG="MyTest";
12 public MyTest(){
13
14 }
15 public void save(){
16 Context context=getContext();
17 SharedPreference sharedPreference=new SharedPreference(context);
18 boolean flag=sharedPreference.SaveKVmessage("admin", "123");
19 Log.i(TAG, "--->>"+flag);
20 }
21 public void Read(){
22 Context context=getContext();
23 SharedPreference sharedPreference=new SharedPreference(context);
24 Map<String,Object> map=sharedPreference.ReadKVmessage();
25 Log.i(TAG, "--->>"+map.toString());
26 }
27 }
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
1 package com.example.android_06sotrage_sqlite.db; 2 3 import android.content.Context; 4 import android.database.DatabaseErrorHandler; 5 import android.database.sqlite.SQLiteDatabase; 6 import android.database.sqlite.SQLiteDatabase.CursorFactory; 7 import android.database.sqlite.SQLiteOpenHelper; 8 9 public class DBOpenHelper extends SQLiteOpenHelper { 10 11 12 private static String name="mydb.db";//数据库名称 13 private static int version=1;//数据库版本号 14 15 public DBOpenHelper(Context context) { 16 super(context, name, null, version); 17 // TODO Auto-generated constructor stub 18 //虽然定义了数据库的名称和版本号, 19 //但直到调用getReadableDatabase或getWritableDatabase的时候才最终生成数据库 20 21 22 } 23 24 /** 25 * 当数据库创建的时候 是第一次被执行 26 * 通常用来完成对数据库表的创建 27 */ 28 @Override 29 public void onCreate(SQLiteDatabase db) { 30 // TODO Auto-generated method stub 31 //支持的数据类型:整型数据 字符串 日期类型 二进制数据类型 32 String sql="create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))"; 33 db.execSQL(sql); 34 } 35 36 @Override 37 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 38 // TODO Auto-generated method stub 39 //原来版本创建时 是1 如果设置成>1的数字,则会更新数据库版本,这里只需要执行alter语句就行 40 String sql="alter table person add sex varchar(8)"; 41 db.execSQL(sql); 42 } 43 44 }
然后在service包下建接口类
1 package com.example.android_06sotrage_sqlite.service; 2 3 import java.util.List; 4 import java.util.Map; 5 6 public interface PersonService { 7 8 public boolean add(Object[] params); 9 public boolean del(Object[] params); 10 public boolean mod(Object[] params); 11 public Map<String,String> find(String[] params); 12 public List<Map<String,String>> findMore(String[] params); 13 }
第三在dao包下建实现类
1 package com.example.android_06sotrage_sqlite.dao; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.content.Context; 9 import android.database.Cursor; 10 import android.database.sqlite.SQLiteDatabase; 11 12 import com.example.android_06sotrage_sqlite.db.DBOpenHelper; 13 import com.example.android_06sotrage_sqlite.service.PersonService; 14 15 public class PersonDao implements PersonService { 16 17 private DBOpenHelper helper=null; 18 public PersonDao(Context context) { 19 // TODO Auto-generated constructor stub 20 helper=new DBOpenHelper(context); 21 } 22 23 @Override 24 public boolean add(Object[] params) { 25 // TODO Auto-generated method stub 26 boolean flag=false; 27 //SQLiteDatabase实现数据库的增删改 28 SQLiteDatabase database=null; 29 try { 30 String sql="insert into person(name,address) values(?,?)"; 31 database=helper.getWritableDatabase(); 32 database.execSQL(sql,params); 33 flag=true; 34 } catch (Exception e) { 35 // TODO: handle exception 36 e.printStackTrace(); 37 } 38 finally{ 39 if(database!=null) 40 database.close(); 41 } 42 return flag; 43 } 44 45 @Override 46 public boolean del(Object[] params) { 47 // TODO Auto-generated method stub 48 boolean flag=false; 49 SQLiteDatabase database=null; 50 try { 51 String sql="delete from person where id=?"; 52 database=helper.getWritableDatabase(); 53 database.execSQL(sql,params); 54 flag=true; 55 } catch (Exception e) { 56 // TODO: handle exception 57 e.printStackTrace(); 58 } 59 finally{ 60 if(database!=null) 61 database.close(); 62 } 63 return flag; 64 } 65 66 @Override 67 public boolean mod(Object[] params) { 68 // TODO Auto-generated method stub 69 boolean flag=false; 70 SQLiteDatabase database=null; 71 try { 72 String sql="update person set name=?,address=? where id=?"; 73 database=helper.getWritableDatabase(); 74 database.execSQL(sql,params); 75 flag=true; 76 } catch (Exception e) { 77 // TODO: handle exception 78 e.printStackTrace(); 79 } 80 finally{ 81 if(database!=null) 82 database.close(); 83 } 84 return flag; 85 } 86 87 @Override 88 public Map<String, String> find(String[] params) { 89 // TODO Auto-generated method stub 90 Map<String, String> map=new HashMap<String, String>(); 91 SQLiteDatabase database=null; 92 try { 93 String sql="select * from person where id=?"; 94 database=helper.getReadableDatabase(); 95 Cursor cursor=database.rawQuery(sql, params); 96 //数据库列的个数 97 int col=cursor.getColumnCount(); 98 while(cursor.moveToNext()){ 99 for (int i = 0; i < col; i++) { 100 String col_name=cursor.getColumnName(i); 101 String col_val=cursor.getString(cursor.getColumnIndex(col_name)); 102 if(col_val==null) 103 col_val=""; 104 map.put(col_name, col_val); 105 } 106 107 } 108 } catch (Exception e) { 109 // TODO: handle exception 110 e.printStackTrace(); 111 } 112 finally{ 113 if(database!=null) 114 database.close(); 115 } 116 return map; 117 } 118 119 @Override 120 public List<Map<String, String>> findMore(String[] params) { 121 // TODO Auto-generated method stub 122 List<Map<String, String>> list=new ArrayList<Map<String,String>>(); 123 SQLiteDatabase database=null; 124 try { 125 String sql="select * from person"; 126 database=helper.getReadableDatabase(); 127 Cursor cursor=database.rawQuery(sql, params); 128 //数据库列的个数 129 int col=cursor.getColumnCount(); 130 while(cursor.moveToNext()){ 131 Map<String, String> map=new HashMap<String, String>(); 132 for (int i = 0; i < col; i++) { 133 String col_name=cursor.getColumnName(i); 134 String col_val=cursor.getString(cursor.getColumnIndex(col_name)); 135 if(col_val==null) 136 col_val=""; 137 map.put(col_name, col_val); 138 } 139 list.add(map); 140 } 141 } catch (Exception e) { 142 // TODO: handle exception 143 e.printStackTrace(); 144 } 145 finally{ 146 if(database!=null) 147 database.close(); 148 } 149 return list; 150 } 151 152 }
最后创建测试类:
1 package com.example.android_06sotrage_sqlite.test; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import com.example.android_06sotrage_sqlite.dao.PersonDao; 7 import com.example.android_06sotrage_sqlite.db.DBOpenHelper; 8 import com.example.android_06sotrage_sqlite.service.PersonService; 9 10 public class MyTest extends android.test.AndroidTestCase{ 11 12 public MyTest() { 13 // TODO Auto-generated constructor stub 14 } 15 16 public void createDB(){ 17 DBOpenHelper helper=new DBOpenHelper(getContext()); 18 helper.getWritableDatabase();//此时才真正创建了数据库 19 } 20 public void add(){ 21 PersonService service=new PersonDao(getContext()); 22 Object[] params={"mlj","xinxiang"}; 23 boolean flag=service.add(params); 24 System.out.println("--->>"+flag); 25 } 26 public void del(){ 27 PersonService service=new PersonDao(getContext()); 28 Object[] params={1}; 29 boolean flag=service.del(params); 30 System.out.println("--->>"+flag); 31 } 32 public void mod(){ 33 PersonService service=new PersonDao(getContext()); 34 Object[] params={"mlj","huojia","1"}; 35 boolean flag=service.mod(params); 36 System.out.println("--->>"+flag); 37 } 38 public void find(){ 39 PersonService service=new PersonDao(getContext()); 40 String[] params={"1"}; 41 Map<String,String> map=service.find(params); 42 System.out.println("--->>"+map.toString()); 43 } 44 public void findMore(){ 45 PersonService service=new PersonDao(getContext()); 46 List<Map<String,String>> list=service.findMore(null); 47 System.out.println("--->>"+list.toString()); 48 } 49 }
方法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类同上
新建接口类:
1 package com.example.android_06sotrage_sqlite.service; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import android.content.ContentValues; 7 8 public interface PersonService2 { 9 10 public boolean add(ContentValues values); 11 public boolean del(String whereClause,String[] whereArgs); 12 public boolean mod(ContentValues values, String whereClause, String[] whereArgs); 13 public Map<String,String> find(String selection,String[] selectionArgs); 14 public List<Map<String,String>> findMore(String selection,String[] selectionArgs); 15 }
第三在dao包下建实现类:
1 package com.example.android_06sotrage_sqlite.dao; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.content.ContentValues; 9 import android.content.Context; 10 import android.database.Cursor; 11 import android.database.sqlite.SQLiteDatabase; 12 13 import com.example.android_06sotrage_sqlite.db.DBOpenHelper; 14 import com.example.android_06sotrage_sqlite.service.PersonService2; 15 16 public class PersonDao2 implements PersonService2 { 17 18 private DBOpenHelper helper=null; 19 public PersonDao2(Context context) { 20 // TODO Auto-generated constructor stub 21 helper=new DBOpenHelper(context); 22 } 23 24 @Override 25 public boolean add(ContentValues values) { 26 // TODO Auto-generated method stub 27 boolean flag=false; 28 long id=-1;//返回最终结果值 如果不等于-1,即表示成功插入 29 //SQLiteDatabase实现数据库的增删改 30 SQLiteDatabase database=null; 31 try { 32 database=helper.getWritableDatabase(); 33 id=database.insert("person", null, values); 34 flag=(id!=-1?true:false); 35 } catch (Exception e) { 36 // TODO: handle exception 37 e.printStackTrace(); 38 } 39 finally{ 40 if(database!=null) 41 database.close(); 42 } 43 return flag; 44 } 45 46 @Override 47 public boolean del(String whereClause,String[] whereArgs) { 48 // TODO Auto-generated method stub 49 boolean flag=false; 50 int count=0;//最终影响的行数 51 SQLiteDatabase database=null; 52 try { 53 database=helper.getWritableDatabase(); 54 count=database.delete("person", whereClause, whereArgs); 55 flag=(count>0?true:false); 56 } catch (Exception e) { 57 // TODO: handle exception 58 e.printStackTrace(); 59 } 60 finally{ 61 if(database!=null) 62 database.close(); 63 } 64 return flag; 65 } 66 67 @Override 68 public boolean mod(ContentValues values, String whereClause, String[] whereArgs) { 69 boolean flag=false; 70 int count=0;//最终影响的行数 71 SQLiteDatabase database=null; 72 try { 73 database=helper.getWritableDatabase(); 74 count=database.update("person", values, whereClause, whereArgs); 75 flag=(count>0?true:false); 76 } catch (Exception e) { 77 // TODO: handle exception 78 e.printStackTrace(); 79 } 80 finally{ 81 if(database!=null) 82 database.close(); 83 } 84 return flag; 85 } 86 87 @Override 88 public Map<String, String> find(String selection,String[] selectionArgs) { 89 // TODO Auto-generated method stub 90 Map<String, String> map=new HashMap<String, String>(); 91 SQLiteDatabase database=null; 92 try { 93 database=helper.getReadableDatabase(); 94 /** 95 * distinct 是否返回唯一值 96 * table name表名 97 * column name 设置为空 表明所有列 98 * selection 99 * selectionArgs 100 * groupBy null 101 * having null 102 * orderBy null 103 * limit null 104 */ 105 Cursor cursor=database.query(true, "person", null, selection, selectionArgs, null, null, null, null); 106 //数据库列的个数 107 int col=cursor.getColumnCount(); 108 while(cursor.moveToNext()){ 109 for (int i = 0; i < col; i++) { 110 String col_name=cursor.getColumnName(i); 111 String col_val=cursor.getString(cursor.getColumnIndex(col_name)); 112 if(col_val==null) 113 col_val=""; 114 map.put(col_name, col_val); 115 } 116 } 117 118 } catch (Exception e) { 119 // TODO: handle exception 120 e.printStackTrace(); 121 } 122 finally{ 123 if(database!=null) 124 database.close(); 125 } 126 return map; 127 } 128 129 @Override 130 public List<Map<String, String>> findMore(String selection,String[] selectionArgs) { 131 // TODO Auto-generated method stub 132 List<Map<String, String>> list=new ArrayList<Map<String,String>>(); 133 SQLiteDatabase database=null; 134 try { 135 database=helper.getReadableDatabase(); 136 Cursor cursor=database.query(false, "person", null, selection, selectionArgs, null, null, null, null); 137 //数据库列的个数 138 int col=cursor.getColumnCount(); 139 while(cursor.moveToNext()){ 140 Map<String, String> map=new HashMap<String, String>(); 141 for (int i = 0; i < col; i++) { 142 String col_name=cursor.getColumnName(i); 143 String col_val=cursor.getString(cursor.getColumnIndex(col_name)); 144 if(col_val==null) 145 col_val=""; 146 map.put(col_name, col_val); 147 } 148 list.add(map); 149 } 150 } catch (Exception e) { 151 // TODO: handle exception 152 e.printStackTrace(); 153 } 154 finally{ 155 if(database!=null) 156 database.close(); 157 } 158 return list; 159 } 160 161 }
最后创建测试类:
1 package com.example.android_06sotrage_sqlite.test; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import android.content.ContentValues; 7 8 import com.example.android_06sotrage_sqlite.dao.PersonDao2; 9 import com.example.android_06sotrage_sqlite.db.DBOpenHelper; 10 import com.example.android_06sotrage_sqlite.service.PersonService2; 11 12 public class MyTest2 extends android.test.AndroidTestCase{ 13 14 public MyTest2() { 15 // TODO Auto-generated constructor stub 16 } 17 18 public void createDB(){ 19 DBOpenHelper helper=new DBOpenHelper(getContext()); 20 helper.getWritableDatabase();//此时才真正创建了数据库 21 } 22 public void add(){ 23 PersonService2 service=new PersonDao2(getContext()); 24 ContentValues values=new ContentValues();//类似于map 25 values.put("name", "zhh"); 26 values.put("address", "henan"); 27 service.add(values); 28 boolean flag=service.add(values); 29 System.out.println("--->>"+flag); 30 } 31 public void del(){ 32 PersonService2 service2=new PersonDao2(getContext()); 33 /** 34 * whereClause 条件字句 35 * 原来sql语句是"delete from person where id=? " 36 * 现在的字句不包含where关键字 37 * whereArgs 字句中的参数列表 38 */ 39 boolean flag=service2.del("id=?", new String[]{"1"}); 40 System.out.println("--->>"+flag); 41 } 42 public void mod(){ 43 PersonService2 service2=new PersonDao2(getContext()); 44 ContentValues values=new ContentValues();//类似于map 45 values.put("name", "zhh"); 46 values.put("address", "jiaozuo"); 47 boolean flag=service2.mod(values, "id=?", new String[]{"2"}); 48 } 49 public void find(){ 50 PersonService2 service2=new PersonDao2(getContext()); 51 Map<String,String> map=service2.find("id=?", new String[]{"1"}); 52 System.out.println("--->>"+map.toString()); 53 54 } 55 public void findMore(){ 56 PersonService2 service2=new PersonDao2(getContext()); 57 //select * from person 58 List<Map<String,String>> list=service2.findMore(null, null); 59 System.out.println("--->>"+list.toString()); 60 } 61 }