- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 ORMLite在 android 项目中,我不想使用扩展 Activity ,因为我在 AsyncTask 上将值插入数据库。
在文档中说:
“如果您不想扩展 OrmLiteBaseActivity
和其他基类,那么您将需要复制它们的功能。您将需要调用 OpenHelperManager.getHelper(Context context, Class openHelperClass )
在代码的开头,保存助手并根据需要使用它,然后在使用完后调用 OpenHelperManager.release()
。”
它还说要在我拥有的 strings.xml
中添加数据库助手类。所以我不确定我做错了什么。
我正在为我的数据层使用一个名为 DataAccess
的类,如下所示:
public class DataAccess {
private Context context;
private DBHelper dbHelper;
public DataAccess(Context _context) {
this.context = _context;
dbHelper = getDBHelper(_context);
}
private DBHelper getDBHelper(Context context) {
if (dbHelper == null) {
dbHelper = (DBHelper) OpenHelperManager.getHelper(context, DBHelper.class);
}
return dbHelper;
}
}
我正在使用扩展的助手类:
public class DBHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
private Dao<SomeObject, Integer> someObjectTable = null;
private ConnectionSource connectionSource = null;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
this.connectionSource = connectionSource;
try {
TableUtils.createTable(connectionSource, SomeObject.class);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
}
public Dao<SomeObject, Integer> getSomeObjectDao() throws SQLException {
if (someObjectTable == null) {
dateTable = getDao(SomeObject.class);
}
return someObjectTable;
}
想法是创建 DataAccess
类,如果还没有,让它创建 DBHelper
。
谁能告诉我这是对还是错,或者我是否走在正确的道路上?
谢谢!
最佳答案
I'm using ORMLite in an android project, and I'm not wanting to use the extended activities because I'm inserting values into the database on an AsyncTask.
您走在正确的轨道上,但有点偏离@Matt。坦率地说,我从来没有在不扩展我们的基类的情况下完成过一个项目。但这是一个很好的练习,所以我创建了这个 ORMLite example project它使用 Activity
并管理自己的助手。
您的 DBHelper
类很好,但实际上您不需要 DataAccess
类。在您的每项 Activity (或服务...)中,您都需要具备以下内容:
private DBHelper dbHelper = null;
@Override
protected void onDestroy() {
super.onDestroy();
if (dbHelper != null) {
OpenHelperManager.releaseHelper();
dbHelper = null;
}
}
private DBHelper getHelper() {
if (dbHelper == null) {
dbHelper = (DBHelper)OpenHelperManager.getHelper(this, DBHelper.class);
}
return dbHelper;
}
您 [显然],然后通过执行以下操作在您的代码中使用它:
Dao<SomeObject, Integer> someObjectDao = getHelper().getSomeObjectDao();
因此,无论何时您第一次调用 getHelper()
,它都会通过管理器获取助手,建立与数据库的连接。每当您的应用程序被操作系统销毁时,它都会释放帮助程序——如果它是最后一个版本,则可能会关闭底层数据库连接。
请注意 OpenHelperManager.getHelper()
需要 Context
作为第一个参数,以防您在没有 Activity
基类的情况下执行此操作.
编辑:
如果您确实想创建一个 DataAccess
类型的类来集中处理辅助类,那么您需要将这些方法设为静态并进行您自己的使用计数器。如果有多个 Activity 和后台任务调用 getHelper()
那么问题是什么时候调用 releaseHelper()
?您必须为每次获取增加一个计数,并且只在计数器回到 0 时才调用释放。但即便如此,我也不能 100% 确定您会从 Activity 类中节省多少行。
关于java - 不使用基本 Activity 的 Ormlite 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656539/
使用 ServiceStack.OrmLite,如果查询返回多个结果集,我如何访问所有结果集并将每个结果集分配给相应的 POCO。例如,我有一个包含以下代码的存储过程: SELECT * FROM U
首先,我是 ORMLite 的新手。我希望我的模型类有一个字段,它是一个字符串列表,最终将保存我的模型对象的标签列表。 我应该使用哪些 ORMLite 注释? 首先我不想拥有所有标签的表格,然后使用
在 Ormlite 中,是否可以在不编写实际 SQL 的情况下进行不区分大小写的查询? 例如,如果我正在寻找 列名 - “账户名” 并查询该列,如果我搜索“金融”,我想获得所有“金融”、“金融”、“金
我最近开始使用 ServiceStack 及其 ORMLite 框架。我在谷歌上搜索并浏览了源代码,但找不到任何相关内容。 使用 ORMLite 执行查询时,有没有办法选择特定的列? 类似的东西:Db
我正在寻找一种在 ormlite 中实现分页的好方法,我发现了另一个 question ,其中包含以下代码段: var data = db.Select(predicate).Skip((int) p
这是 Entity Framework : var department = _context.Departments .Include(dep => dep.Empl
我有一张 table CREATE TABLE [dbo].[ServiceTestCase]( [SSN] [int] IDENTITY(600000001,1) NOT NULL,
有没有办法用 servicestack/ormlite 预加载所有嵌套和子嵌套引用? public class Person { public int Id { get; set; }
继 this comment ,如何执行 ServiceStack OrmLite 查询来连接两个或多个表并从每个表中返回一些列? 使用 OrmLite Does_only_populate_Sele
我想知道是否可以查明 ORMLite 的 dao.createOrUpdate() 方法是否实际创建或更新了表行。有一个结果对象(CreateOrUpdateStatus),其中包含这些信息,但所有指
有什么方法可以返回 ServiceStack.OrmLite 中的表的子集吗? 像这样的东西: public class MyStuff { public Guid Id { get; set
使用 ormLite 我可以通过以下方式获取所有记录: myDao.queryForAll(); 如何只获取前 10 条记录而不是所有记录? 最佳答案 您必须使用 QueryBuilder 并设置限制
我正在 ServiceStack 的 OrmLite 中编写分页查询,选择页面范围内的总记录数和记录 ID。假设 query 是一些任意的 SqlExpression 选择一堆记录: var idQu
我正在努力用 ServiceStack 的 ORMLite 替换现有的“重型”商业 ORM。在重型 ORM 中,我们有能力 Hook “OnSaving”或“BeforeSaving”方法以在保存到数
我正在尝试 ServiceStack OrmLite,但现在我被这个异常难住了:A first chance exception of type 'System.NullReferenceExcept
我正在尝试 Ormlite。我发现当我插入一个带有 DateTime 属性的对象时,ormlite 应用它得到 -8:00 (我的时区是 +8)。应按字面意思插入时间。就我而言,它已经是 UTC。 但
我正在对现有的 SQL Server 数据库使用 OrmLite,该数据库已发布用于访问的存储过程。这些 SP 之一采用 3 个 int 参数,但期望其中一个或另一个为空。但是,没有任何参数被声明为可
我正在为数据可视化做一些查询,并依靠 GroupBy、Avg、Sum 和类似函数从数据库中获取良好的数据集。 我想在 ServiceStack OrmLite 中使用类似于 GroupBy 的东西。关
我希望使用 ORMLite 按多个别名表进行分组,但我似乎遇到了问题。 当在 SqlExpression 的 GroupBy 中使用具有匿名类型的 Sql.TableAlias 时,为 group b
这个周末我才第一次发现 ServiceStack,我觉得它非常棒。因此,我已经在将我所有的项目转换为它。然后我遇到了一个小障碍。 我找不到任何提到使用 OrmLite 首先从数据库开始然后将现有模式映
我是一名优秀的程序员,十分优秀!