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

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 }

运行效果如下:

时间: 2024-10-14 01:01:07

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

MYSQL学习笔记 (二)对数据库结构的增删改查

显示数据库 show databases; 选择数据库 use database;//其实database为数据库的名字 创建表 create table tbclass( id int not null auto_increment primary key, className varchar(20) not null unique, studentNum smallint not null )engine=myisam default charset=utf8 插入数据 insert int

MySQL数据库学习笔记(八)----JDBC入门及简单增删改查数据库的操作

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4050825.html 联系方式:[email protected] [正文]                                                                                                               

Android:日常学习笔记(10)———使用LitePal操作数据库

Android:日常学习笔记(10)---使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表.増删改查的操作.并且LitePal很"轻",jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别.目前LitePal的源码已经托管到了GitHub上. 关

JAVA学习笔记(五十一)- DBUtil 封装数据库工具类

数据库工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 数据库工具类 */ public class DBUtil { // 获取数据库连接 public static Connection getConnection() { String dr

Java学习笔记——线程两种常用的创建调用方法

这是两种开发中常用的线程使用方法,匿名对象调用即可,很简单,掌握即可 <span style="font-size:18px;">class ThreadDemo { public static void main(String[] args) { new Thread() { public void run() { //coding here } }.start(); Runnable r = new Runnable() { public void run() { //

Android SQLite服务--创建、增删改查

<pre name="code" class="java">import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * 默认就在数据库里创建4张表 * * */ public class DBOpen

Java的动态数组:ArrayList的简单运用(增删改查)

小伙伴们!今天做个笔记分享给大家!这个是我创建的QQ交流群:315677448感兴趣的欢迎你的加入.废话不多说直接进入今天的主体 ArrayList就是传说中的动态数组! 咱们创建一个Test类,具体代码如下: package Case0000014; import java.util.ArrayList; public class test {     public static void main(String[] args) {         ArrayList lis = new Ar

java ee 在数据库中执行增删改查

1.先建一个主页面里面包含着添加方法 <%@page import="java.text.SimpleDateFormat"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <

ABP学习入门系列(五)(展示实现增删改查)

大致要实现的 效果如下 1,添加Controller(用到的X.PagedList 注意到nuget添加) using System.Web.Mvc; using Abp.Application.Services.Dto; using Abp.Runtime.Caching; using Abp.Threading; using Abp.Web.Mvc.Authorization; using AutoMapper; using LearningMpaAbp.Notifications; usi