Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上扩展ORMLite的BaseDaoImpl类以扩展功能_Android_Sqlite_Ormlite - Fatal编程技术网

如何在Android上扩展ORMLite的BaseDaoImpl类以扩展功能

如何在Android上扩展ORMLite的BaseDaoImpl类以扩展功能,android,sqlite,ormlite,Android,Sqlite,Ormlite,我想知道是否有办法在Android上扩展ORMLite类。在我的Android项目中,我使用了几个不同的Dao对象来访问不同的业务对象。我的业务对象存储在不同的表中,并且都是从一个BusinessObject基类继承的,该基类有两个成员Long id和长objectId其中id是数据库表中对象的真正唯一id public abstract class BusinessObject{ public static final String ID_COLUMN_NAME = "_id"

我想知道是否有办法在Android上扩展ORMLite类。在我的Android项目中,我使用了几个不同的Dao对象来访问不同的业务对象。我的业务对象存储在不同的表中,并且都是从一个BusinessObject基类继承的,该基类有两个成员
Long id
长objectId
其中
id
是数据库表中对象的真正唯一id

public abstract class BusinessObject{   

    public static final String ID_COLUMN_NAME = "_id";
    public static final String OBJECT_ID_COLUMN_NAME = "object_id";

    @SerializedName(value="_id")
    @DatabaseField(canBeNull=false, columnName = ID_COLUMN_NAME, generatedId=true)
    private int id;

    @SerializedName(value="id")
    @DatabaseField(canBeNull=false, columnName=OBJECT_ID_COLUMN_NAME, index=true, unique = true)    
    private long objectId;
}
现在我希望能够按id和objectId删除业务对象。由于BaseDaoImpl类,按id删除当然已经是可能的了。为了能够通过objectId删除它们,我考虑扩展BaseDaoImpl类,并向其添加一个通用方法deleteByObjectId()方法。在该方法中,我将使用dao的delete()方法删除对象,该方法接受PreparedDelete语句

public class ExtendedDaoImple<T, ID> extends BaseDaoImpl<T, ID> implements ExtendedDao<T, ID> {

    protected ExtendedDaoImple(Class<T> dataClass) throws SQLException {
        super(dataClass);
    }

    public int deleteByObjectId(long objectId) throws SQLException {
        DeleteBuilder<T, ID> delBuilder = (DeleteBuilder<T, ID>) deleteBuilder();       
        delBuilder.where().eq(BusinessObject.OBJECT_ID_COLUMN_NAME, objectId).prepare();
        return delete(delBuilder.prepare());
    }
}
公共类ExtendedDaoImple扩展BaseDaoImpl实现ExtendedDao{
受保护的ExtendedDaoImple(类dataClass)引发SQLException{
超级(数据类);
}
public int deleteByObjectId(长objectId)引发SQLException{
DeleteBuilder delBuilder=(DeleteBuilder)DeleteBuilder();
delBuilder.where().eq(BusinessObject.OBJECT_ID_COLUMN_NAME,objectId).prepare();
返回delete(delBuilder.prepare());
}
}
我的问题是,我不知道如何从类中创建ExtendedDaoImpl类的实例。通常,通过调用OrmLiteSqliteOpenHelper类的getDao()方法并传递Dao应用于的BusinessObject类来创建Dao。例如

Dao<Image, Long> imageDao = getDao(Image.class);
Dao-imageDao=getDao(Image.class);
那么,有没有办法修改OrmLiteSqliteOpenHelper类,从而可以检索ExtendedDaoImpl对象而不是BaseDaoImpl对象

我的问题是,我不知道如何从OrmLiteSqliteOpenHelper类创建ExtendedDaoImpl类的实例

措辞巧妙的问题。
@DatabaseTable
注释有一个字段
daoClass
,可用于指定要构造的DAO类

以下是
DaoManager
的文档

您的类需要有一个带有
ConnectionSource
class
参数的构造函数


解决方案没有很好的文档记录。如果您对如何改进文档有任何想法,请告诉我。

太好了!工作完美。再次感谢您的快速支持!你做得很好!我必须承认,我只是快速浏览了一下文档,因为时间实在太晚了,显然我忽略了这一部分。看完后我觉得还不错。显然,我更难找到它有没有一种方法可以用标准的JPA注释来做到这一点?在@Buckstabue做什么?ORMLite确实支持JPA注释的子集来标记类,但android fu仍然是必需的。@Gray我的意思是,可以在不使用ORMLite注释但使用JPA注释的情况下为实体指定dao类吗