码迷,mamicode.com
首页 > 移动开发 > 详细

Android(java)学习笔记245:ContentProvider之银行数据库创建和增删改查的实现

时间:2015-09-13 23:05:17      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

1.Android的四大组件:

(1)Activity  用户交互的UI界面

(2)Service  后台运行的服务

(3)BroadcastReceiver 广播接收者

(4)ContentProvider  内容提供者

 

2. ContentProvider  内容提供者

用途:把应用程序私有的数据暴露给别的应用程序

 

3.下面通过一个银行数据库创建和增删改查的实现案例说明ContentProvider的使用:

(1)首先我们这里要用到数据库,首先我们必须先扩展一个抽象类SQLiteOpenHelper(SQLiteOpenHelper类似于File),我们定义一个子类去继承SQLiteOpenHelper,实现其抽象方法:

自定义的子类为MyDBOpenHelper

 1 package com.himi.db;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6 
 7 public class MyDBOpenHelper extends SQLiteOpenHelper {
 8 
 9     public MyDBOpenHelper(Context context) {
10         super(context, "bank.db", null, 1);
11     }
12 
13     //数据库第一被创建调用的方法,适合做数据库表结构的初始化
14     @Override
15     public void onCreate(SQLiteDatabase db) {
16         db.execSQL("create table account (_id integer primary key autoincrement, name varchar(20), money varchar(2))");
17         
18     }
19 
20     //数据库更新的时候,调用的方法
21     @Override
22     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
23 
24     }
25 
26 }

(2)同时编写一个实现数据库增删改查的工具类,如下利用Google的API,如下:

  1 package com.himi.db.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.himi.db.MyDBOpenHelper;
 14 
 15 /**
 16  * 
 17  *银行数据库的data access object
 18  *
 19  */
 20 public class BankDBDao {
 21     private MyDBOpenHelper helper;
 22 
 23     public BankDBDao(Context context) {
 24         helper = new MyDBOpenHelper(context);
 25     }
 26     
 27     /**
 28      * 添加一条用户信息
 29      * @param name  姓名
 30      * @param money 钱
 31      * @return 代表添加在数据库的行号id,  如果返回-1,代表添加失败(用户已经存在)
 32      */
 33     public long add(String name, float money) {
 34         if(isUserExist(name)) {
 35             return -1;
 36         }
 37         SQLiteDatabase db = helper.getWritableDatabase();
 38         ContentValues values = new ContentValues();
 39         values.put("name", name);
 40         values.put("money", money);
 41         long rowID = db.insert("account", null, values);
 42         db.close();
 43         return rowID;
 44     }
 45     
 46     
 47     
 48     /**
 49      * 删除一条数据库记录
 50      * @param name 用户姓名
 51      * @return  true 删除成功     false 删除失败
 52      */
 53     public boolean delete(String name) {
 54         SQLiteDatabase db = helper.getWritableDatabase();
 55         int result = db.delete("account", "name=?", new String[] {name});
 56         
 57         db.close();
 58         if(result >0) {
 59             return true;
 60         }else {
 61             return false;
 62         }
 63         
 64     }
 65     
 66     /**
 67      * 修改用户的的账户信息
 68      * @param name  要修改的储户的姓名
 69      * @param money 新的账户余额
 70      * @return  true 修改成功   false 修改失败
 71      */
 72     public boolean update(String name, float money) {
 73         
 74         
 75         SQLiteDatabase db = helper.getWritableDatabase();
 76         ContentValues values = new ContentValues();
 77         values.put("name", name);
 78         values.put("money", money);
 79         int result = db.update("account", values, "name=?", new String[] {name});
 80         db.close();
 81         if(result >0) {
 82             return true;
 83         }else {
 84             return false;
 85         }
 86     }
 87     
 88     /**
 89      * 查询某一个用户信息账户余额
 90      * @param name 要查询的用户的姓名
 91      */
 92     public float getUserMoney(String name) {
 93         float money = 0;
 94         SQLiteDatabase db = helper.getReadableDatabase();
 95         Cursor cursor = db.query("account", new String[] {"money"}, "name=?", new String[] {name}, null, null, null);
 96         if(cursor.moveToNext()) { //游标可以移动下一个,说明有数据查询到    
 97             money = cursor.getFloat(0);
 98         }
 99         cursor.close();
100         db.close();
101         return money;
102     }
103     
104     
105     public List<Map<String, Object>> findAllUser() {
106         List<Map<String, Object>> allUsers = new ArrayList<Map<String, Object>>();
107         SQLiteDatabase db = helper.getReadableDatabase();
108         Cursor cursor = db.query("account", new String[] { "_id", "name",
109                 "money" }, null, null, null, null, null);
110         while (cursor.moveToNext()) {
111             Map<String, Object> user = new HashMap<String, Object>();
112             user.put("_id", cursor.getInt(0));
113             user.put("name", cursor.getString(1));
114             user.put("money", cursor.getFloat(2));
115             allUsers.add(user);
116         }
117 
118         cursor.close();
119         db.close();
120 
121         return allUsers;
122     }
123     
124     
125     
126     /**
127      * 查询一个用户是否存在
128      * @param name 要查询用户的名字
129      * @return   true 存在      false 不存在
130      */
131     
132     public boolean isUserExist(String name) {
133         boolean result = false;
134         SQLiteDatabase db = helper.getReadableDatabase();
135         Cursor cursor = db.query("account", new String[] {"money"}, "name=?", new String[] {name}, null, null, null);
136         if(cursor.moveToNext()) { //游标可以移动下一个,说明有数据查询到    
137             result = true;
138         }
139         cursor.close();
140         db.close();
141         return result;
142     }
143   }

 (3)最后的MainActivity,为如下:

 1 package com.himi.db;
 2 
 3 
 4 import java.util.Random;
 5 
 6 import com.himi.db.dao.BankDBDao;
 7 
 8 import android.app.Activity;
 9 import android.os.Bundle;
10 
11 public class MainActivity extends Activity {
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17         BankDBDao dao = new BankDBDao(this);
18         Random random = new Random();
19         
20         for (int i = 0; i < 20; i++) {
21             dao.add("张" + i, random.nextFloat() + random.nextInt(500));
22         }
23     }
24 
25 }

运行效果如下:

技术分享

 

 

技术分享

Android(java)学习笔记245:ContentProvider之银行数据库创建和增删改查的实现

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4805669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!