android 之sqlite数据库Dao三层模型
来源:互联网 发布:js 数组值存在 编辑:程序博客网 时间:2024/05/17 07:11
DAO是什么
DAO(数据访问对象)在web程序设计中是业务逻辑层和数据库之间的一个层级。用来接收业务请求并对数据库进行处理。
了解DAO,首先要知道web开发的层级。
现在的web开发主要使用的是MVC的设计模式。所以按照“显示-业务-控制器”的理念。我们将web分为客户层、显示层、业务层、数据层(DAO)和资源层(数据库)。
客户层就是客户使用的浏览器。这一端基本上不用我们处理。
显示层就是显示在用户浏览器上的各种画面,现在广泛使用JSP。
业务层是整个项目的核心。对多个DAO操作进行组合。
数据层(DAO)是专门提取出来处理数据库的操作对象。是一个个原子性的对象。
资源层主要是数据库的操作层,可以对数据进行增删改查。但是如果直接使用资源层操作处理数据库,会让代码变得复杂混淆难以重用。所以我们将操作提炼出来,也就成了DAO层。
DAO的组成
一个DAO一共由六个类或者接口组成。他们分别是:
DatabaseConnection:专门负责数据库的打开和关闭。
VO:由属性、setter和getter方法组成。它的每一个属性和表中的字段相对应,每一个VO类实例化的对象,就表示了表中的一条记录。这个类的名字和表名要一致。假设表名为xxx
DAO:这是一个接口,来预先定义一系列增删改查的操作。命名规则为IxxxDAO.Java。
Impl:DAO的真实实现类,命名规则为xxxDAOImpl。这个类最好放到DAO的子包里面。要给这个类写一个构造方法,传入一个connection的对象。然后复写DAO中定义的方法即可。
Proxy:代理实现类,就是打开关闭数据库,然后调用Impl来实现。命名规则是xxxDAOProxy。
Factory:工厂类,通过工取得DAO的实例化对象。命名规则是DAOFactory。实际使用此DAO操作时,只需要导入VO所在的包和工厂包即可。
DAO接口的设计
DAO接口是用来预定义操作的。
增加表单中的条目
publicBoolean doCreat(VO对象) throws Exception;
查找并返回所有符合关键字的VO
publicList<VO类> findAll(String keyWord) throws Exception;
查找符合ID的单个VO
publicVO类 findById(int id) throws Exception;
DAO模型
在模式I中,使用这样的封装之后,只需要调用方法,就可以对数据库进行操作。
比如在JSP提交页面后的跳转页面里,用scriptlet定义一段代码,实例化一个VO,并根据表单赋值,然后调用插入的方法,就可以可以成功插入一个新的VO了。
在MVC模式中,也会使用DAO。区别是在JSP和DAO之间加入了Servlet,使得数据层和表示层进一步的分离。
在andorid中用sqlite数据库实现:
1.Utils类
package com.bool.utils;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by root on 7/15/17. */public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context){ super(context,"person.db",null,1); } public void onCreate(SQLiteDatabase db){ db.execSQL("create table person(id integer primary key autoincrement," + "name varchar(20),age integer not null,sex varchar(10))"); } public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ db.execSQL("alter table person add column account varchar(20)"); }}
两个模型:
package com.bool.model;/** * Created by root on 7/15/17. */public class CorePage { private int totalRecod; //总记录数 private int totalPage; //总页数 private int step; //步长 private int privous; //上一页 private int thisPage; //当前页面 private int next; //下一页 public CorePage() { } public CorePage(int totalRecod, int totalPage, int step, int privous, int thisPage, int next) { this.totalRecod = totalRecod; this.totalPage = totalPage; this.step = step; this.privous = privous; this.thisPage = thisPage; this.next = next; } public int getTotalRecod() { return totalRecod; } public void setTotalRecod(int totalRecod) { this.totalRecod = totalRecod; } public int getTotalPage() { if(totalRecod%step!=0){ totalPage = totalRecod/step; }else{ totalPage = ((int)(totalRecod/step))+1; } return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getStep() { return step; } public void setStep(int step) { this.step = step; } public int getPrivous() { if(thisPage > 1){ privous = thisPage-1; }else{ privous=-1; } return privous; } public void setPrivous(int privous) { this.privous = privous; } public int getThisPage() { return thisPage; } public void setThisPage(int thisPage) { this.thisPage = thisPage; } public int getNext() { next=thisPage+1; return next; } public void setNext(int next) { this.next = next; } @Override public String toString() { return "CorePage{" + "totalRecod=" + totalRecod + ", totalPage=" + totalPage + ", step=" + step + ", privous=" + privous + ", thisPage=" + thisPage + ", next=" + next + '}'; }}
package com.bool.model;/** * Created by root on 7/15/17. */public class Person { private int id; private String name; private int age; private String sex; public Person() { } public Person(int id, String name, int age, String sex) { this.id = id; this.name = name; this.age = age; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; }}
dao接口:
package com.bool.dao;import com.bool.model.CorePage;import com.bool.model.Person;import java.util.List;/** * Created by root on 7/15/17. */public interface PersonDao { public void add(Person p); public void remove(int id); public void update(Person p); public Person findById(int id); public List<Person> findByCoreBar(CorePage cp); public List<Person> findAll();}
Dao实现类:
package com.bool.daoImp;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.bool.dao.PersonDao;import com.bool.model.CorePage;import com.bool.model.Person;import com.bool.utils.DBHelper;import java.sql.PreparedStatement;import java.util.ArrayList;import java.util.List;/** * Created by root on 7/15/17. */public class PersonDaoImp implements PersonDao { DBHelper helper = null; public PersonDaoImp(Context context){ helper = new DBHelper(context); } @Override public void add(Person p) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues value = new ContentValues(); value.put("name",p.getName()); value.put("age",p.getAge()); value.put("sex",p.getSex()); db.insert("person",null,value); db.close(); } @Override public void remove(int id) { SQLiteDatabase db = helper.getWritableDatabase(); db.delete("person","id=?",new String[]{id+""}); db.close(); } @Override public void update(Person p) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name",p.getName()); values.put("age",p.getAge()); values.put("sex",p.getSex()); db.update("person",values,"id=?",new String[]{p.getId()+""}); db.close(); } @Override public Person findById(int id) { SQLiteDatabase db = helper.getReadableDatabase(); Person person = null; Cursor cursor = db.query("person",null,"id=?",new String[]{id+""},null,null,null); if(cursor.moveToNext()){ person = new Person(); person.setId(cursor.getInt(0)); person.setName(cursor.getString(1)); person.setAge(cursor.getInt(2)); person.setSex(cursor.getString(3)); } db.close(); return person; } @Override public List<Person> findByCoreBar(CorePage cp) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person limit "+((cp.getThisPage()-1)*cp.getStep())+","+cp.getStep(),null); List<Person> list = new ArrayList<Person>(); while(cursor.moveToNext()){ Person person = new Person(); person.setId(cursor.getInt(0)); person.setName(cursor.getString(1)); person.setAge(cursor.getInt(2)); person.setSex(cursor.getString(3)); list.add(person); } db.close(); return list; } @Override public List<Person> findAll() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person",null); List<Person> list = new ArrayList<Person>(); while(cursor.moveToNext()){ Person person = new Person(); person.setId(cursor.getInt(0)); person.setName(cursor.getString(1)); person.setAge(cursor.getInt(2)); person.setSex(cursor.getString(3)); list.add(person); } db.close(); return list; } public int getCount(){ SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select count(*) from person",null); int count = -1; if(cursor.moveToNext()){ count = cursor.getInt(0); } return count; }}测试代码:
package com.example.root.myapplication;import android.provider.Settings;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import com.bool.dao.PersonDao;import com.bool.daoImp.PersonDaoImp;import com.bool.model.CorePage;import com.bool.model.Person;import java.util.List;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PersonDaoImp personDaoImp = new PersonDaoImp(this); Person person = new Person(); person.setName("bool"); person.setAge(15); person.setSex("男"); personDaoImp.add(person); //添加person person.setId(1); person.setAge(18); personDaoImp.update(person); //更新person Person person1 = personDaoImp.findById(1); //查找person Log.e("person","person1:"+person1); CorePage cp = new CorePage(); cp.setTotalRecod(personDaoImp.getCount()); cp.setStep(5); cp.setThisPage(1); List<Person> list = personDaoImp.findByCoreBar(cp); //通过分页条查询 for (Person p: list) { Log.e("core page query person",p.toString()); } List<Person> list2 = personDaoImp.findAll(); //查询所有 for (Person p : list2) { Log.e("all person",p.toString()); } personDaoImp.remove(1); List<Person> list3 = personDaoImp.findAll(); Log.e("total recod count:",list3.size()+""); }}
输出结果:
基本文档结构:
- android 之sqlite数据库Dao三层模型
- Android SQLite 数据库DAO 基本方法
- Android 之 SQLite 数据库
- Android之SQLite数据库
- Android之SQLite数据库
- Android数据库之SQLite
- Android之SQLite数据库
- Android之SQLite数据库
- Android Sqlite 与 dao
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- Android数据库 之 SQLite数据库
- 集训Stage 1-Part 3-2017.7.12~7.16总结
- Fence Repair POJ
- UVA
- USACO-Section1.5 Prime Palindromes [回文数][质数]
- Kickstart Round B 2017 Problem B. Center
- android 之sqlite数据库Dao三层模型
- POJ
- Access restriction: The type Resource is not accessible due to restriction on required library
- IntelliJ IDEA2016 + tomcat 设置热部署
- Java高级之反射
- shell相关命令_待补充
- slow motion video reveals an unprecedented look at hummingbirds' lives
- hadoop启动报错
- tensorflow学习之cifar_10模型评估