我正在使用内容提供程序来管理我的应用程序数据,这些数据不会与其他应用程序共享。但是,有一些样板代码,例如将光标转换为域对象。 ORMLite 提供了一种更优雅的方式,将数据库条目直接映射到域对象。所以我想用 ORMlite 替换内容提供者。但是我有些担心:
我是否应该用 ORMLite 替换内容提供者?
最佳答案
我不认为,您可以将 ORM 与 Content Provider 进行比较。 ORMLite 提供以下功能 link给用户,并在开发时有完整的独立目标。
但除了您提到的内容之外,还有内容提供商的其他一些好处。
如果您想在多个应用程序或进程之间共享日期。可能现在您没有任何计划这样做,但似乎您的应用程序对数据库的负担很重,并且将来如果您计划与第三方或您的其他应用程序共享您的数据,您可以选择与内容提供商。
内容提供程序是所有 Android 版本的标准配置,这也意味着您的应用使用它是安全的。我很确定 ORMLite 也很稳定。但是你真的想冒这个风险吗,特别是如果那不能节省你的时间或者你没有任何业务要求这样做。 Android API 已经支离 splinter ,您是否想在此基础上承担其他工作负载?
如果您想将数据上传到云端,很容易与 SyncAdapter 集成
使用 android 安全和权限功能。
关于处理 Content Provider 所需的额外代码,您是对的。
现在我正在做一个项目,我们有大约 20 个表。我为每个表创建了一个 DAO。它基本上在内部使用内容提供者。
DAO->Content Provider->SQL Lite Open Helper
Class XyzDao{
private final Context mContext;
XyzDao(Context context){
this.mContext=context;
}
public String getMyData(){
//content provider code
return myData;
}
public void setMyData(String x, int y, double z){
//content provider code to set the data
}
}
如果没有 Content Provider 我本可以完成,现在根据当前要求可以正常工作,但我仍然选择这条路线。你可能会问为什么?
而且,最好的部分是从任何 Activity 中我可以简单地使用我的 DAO 来访问数据库。
或者您可以直接访问SQLLiteOpenHelper从你的 DAO。
归根结底,每个选择都取决于您的业务需求。如果您有很多持久性对象,ORMLite 可能是一个不错的选择。
关于Android ContentProvider 与 ORMLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18779097/
根据ServiceStackOrmlitedocumentation.我应该在Debug模式下生成sql查询。但是,我无法看到这些查询。简单代码privatestaticreadonlystringDataDirLoc=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+"\\TargetIntegration\\Test\\Debug\\";privatereadonlystringdbFileName=DataDirLoc+"Test.db3";[Test]publicvoidCan_Genera
我刚刚了解了一种天才类型,它可以简化我的很多工作,但我喜欢的ORM似乎无法识别它。是否有解决方法让ServiceStackOrmLite识别SQLServer中的HierarchyId?关于修改哪些文件的任何建议以及如何进行的任何提示?编辑:这是对问题的更好说明。我有以下类(class):publicclassMyClass{publicintId{get;set;}publicSqlHierarchyIdHierarchyId{get;set;}}SqlHierarchyId是自定义SQLServer数据类型。OrmLite将为其生成以下类:有趣的是,我可以在属性上使用[String
我正在尝试创建一个对象并在单个操作中填充该对象持有的外部集合的成员。我已经尝试了我能想到的每一种操作顺序,但似乎无法让它发挥作用。我的类(class)是(跳过不相关的字段和注释):@DatabaseTablepublicclassScheduledJob{@DatabaseField(id=true)privateStringid=UUID.randomUUID().toString();@ForeignCollectionField(eager=true)privateCollectiontasks;/*otherstuffhere...*/}@DatabaseTablepublic
在OrmLite中,表的名称要么是它所基于的类的名称,要么是在@DatabaseTable(tableName="...")中定义的任何内容。注释该类。有没有方便的方法在运行时获取表名?在我的例子中,升级数据库时我需要所有表的名称以基于这些表重新创建数据库触发器。我已经查过了http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/table/TableInfo.html但我不明白ID应该是什么。 最佳答案 您可以使用extractTableNameDatabaseTableC
我想知道如何更新ORMLITE中的外来对象?假设我有这些类(class)这是父级publicstaticclassParent{@DatabaseField(generatedId=true,allowGeneratedIdInsert=true)intid;@DatabaseFieldStringname;...这是childpublicstaticclassChild{@DatabaseField(generatedId=true,allowGeneratedIdInsert=true)intid;@DatabaseField(canBeNull=false,foreign=tru
我刚刚添加了Ormlite在我的android项目上,出现以下错误:Error:Executionfailedfortask':AgCelence:dexDebug'.>com.android.ide.common.internal.LoggedErrorException:Failedtoruncommand:/my/home/path/apps/Android/sdk/build-tools/19.0.3/dx--dex--output/my/home/path/workspace/my/project/path/build/dex/debug/my/home/path/works
OLDENTITY:我有一个实体,但我忘记在某些字段上添加@DatabaseField注释@DatabaseTablepublicclassCard{@DatabaseField(generatedId=true)privateintid;@DatabaseField(unique=true)privateStringcardNumber;@DatabaseFieldprivateStringnameOnCard;privateStringccv;privateStringvalidFrom;privateStringvalidTill;privateStringpin;//Requi
关于使用ORMLite的快速问题。我试图确保我的实现是正确的。文档的一部分讨论了closableIterators以及访问它如何加载LazyForeignCollection类,并且需要关闭(或读到最后)才能关闭数据库连接:NOTE:LikewiththeDao.iterator()method,theiteratorreturnedbyalazycollectionmustbeclosedwhenyouaredonewithitbecausethereisaconnectionopentothedatabaseunderneath.Aclosehappenseitherifyougo
如何在android中使用ORMlite保存一个ArrayList我的模型如下classModel{@DatabaseFieldpublicStringtype="";@DatabaseFieldpublicStringname="";@DatabaseFieldpublicDatedateTime=null;@DatabaseFieldArrayListitems=null;}并且Item类有classItem{@DatabaseFieldStringitemName;...}我收到以下异常:java.sql.SQLException:ORMLitecan'tstoreunknown
我正在使用ormlitev4.35,我只需要在eclipse中将我的android工具更新到r18,因为在我升级工具之前,IDE不会构建我的项目。升级后,以下行会引发错误:mDbHelper=OpenHelperManager.getHelper(this,DatabaseHelper.class);异常是NoClassDefFoundError我去了ormlite网站,看到有一个更新的版本(4.40)下载并用更新的版本替换了引用,不幸的是,这并没有解决问题。有没有人遇到这个问题并解决了它? 最佳答案 Theexceptionisa