为数据库处理创建数据模型类
Posted
技术标签:
【中文标题】为数据库处理创建数据模型类【英文标题】:Creating data model class for database handling 【发布时间】:2011-10-18 19:41:03 【问题描述】:当我意识到我应该实现MVC
模式时,我刚刚开始研究数据库应用程序,因为该应用程序非常复杂并且涉及许多数据库操作。
对此,我决定创建一个单独的model class
来处理数据库操作。此类将具有在执行 Sqlite 命令(例如选择)后返回数据的所有方法或将简单地执行 SQLite 命令(例如删除)。但我想要将这个类与Database Adapter
类分开,我在其中打开、创建和关闭我的数据库。
让我把我的概念写成代码:
public class DataModel
/*
Private members
*/
// Method to Select data from Student table
public ArrayList<String> FetchStudents (parameter 1)
private ArrayList<String> arrStudent;
DatabaseAdapter objDB= new DatabaseAdapter();
objDB.open();
/*
Some code
*/
objDB.close();
return arrStudent
//Method to delete record from Student table
public DeleteStudent(parameter 1)
DatabaseAdapter objDB= new DatabaseAdapter();
objDB.open();
//Some code
objDB.close();
/*
Rest of methods
*/
//数据库适配器类
private static class DatabaseHelper extends SQLiteOpenHelper
DatabaseHelper(Context context)
super(context, DATABASE_NAME, null, DATABASE_VERSION);
/**
* onCreate method is called for the 1st time when database doesn't exists.
*/
@Override
public void onCreate(SQLiteDatabase db)
Log.i(TAG, "Creating DataBase: " + CREATE_STUDENT_TABLE);
db.execSQL(CREATE_STUDENT_TABLE);
/**
* onUpgrade method is called when database version changes.
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion);
问题: 我想问的是这是正确的实施方法吗?为数据库方法创建单独的类可以吗?你们认为以后有哪些限制或问题可能会困扰我?另外,有没有更好的方法来实现上述概念?
谢谢 石头
【问题讨论】:
【参考方案1】:android 的原生方法数据建模是 contentproviders。 Link
它还抽象了数据源的类型。
我曾经以类似的方式做到这一点。但这也是主观的。
【讨论】:
【参考方案2】:您所说的“模型类”通常称为数据访问对象 (DAO)。您的模型通常是一组包含数据和业务逻辑的类。在您的情况下,可能是具有 ID、名称、GPA 等属性的 Student
类。如果您想将数据访问与模型分开,您可以让数据访问类 (DatabaseHelper
) 查询数据库并使用它获取的数据返回 Student
对象或 List<Student>
。将数据访问类与数据库助手分开并没有多大意义,最好将所有与数据库相关的代码放在一个地方。
但是,使用模型类(仅)在 Android 上可能并不总是可行的,因为它原生支持从光标(CursorAdapter
等)获取和显示数据。如果你想使用其中的任何一个,你将不得不公开你的数据,而不是作为模型对象,而是作为Cursor
's。至于内容提供者,也可以看看这些,但如果您不需要将数据暴露给其他应用程序,那么写一个ContentProvider
可能会有点过头了。
另一方面,您不希望在每次查询时都打开和关闭数据库。让它保持打开实际上是安全的,当你的应用进程死亡时它会自动关闭。
【讨论】:
【参考方案3】:我在我的应用程序中执行此操作,效果非常好,代码很干净,根本不会影响性能,尤其是对于今天的硬件手机。我尝试了所有其他方法,甚至使用了内容提供程序,但在我看来它只是过于复杂了。
【讨论】:
以上是关于为数据库处理创建数据模型类的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NSObject 模型类转换为 NSManagedObject 的子类?
Web API系列教程3.2 — 实战:处理数据(添加模型和控制器)