我正在使用sqlite进行azure脱机同步。并有几个问题。我是android和azure的新手
是否可以在本地sqlite商店中定义primary_key(当我在使用azure apis时)?因为我看到支持的android列类型很少。如果我需要一个有助于处理离线数据的主键(可能是出于性能或任何原因),该怎么办
ColumnDataType:Boolean,Integer,Real,String,Date,DateTimeOffset,Other localStore.defineTable(" FR_Tbl_Items",tableDefinition);
我面临的另一个问题是,根据微软的ToDoItem示例,首先我应该有一个用于表的类(ToDoItem)定义所有列,然后使用它来创建MobileServiceTable对象以从azure获取数据。但如果我们需要再次离线同步,我们必须使用defineTable函数。这并没有将ToDoItem类作为参数。我们必须在哈希映射中再次定义并传递它。为什么会这样?或者还有其他方法吗?
编辑:我知道sqlite支持主键,但看起来像azure不支持。我没有看到使用主键创建表的任何规定私人MobileServiceTable mToDoTable;和公共空白 defineTable(String tableName,Map columns)
private void define_Tbl_ChangedTable_Table(DBManager localStore) throws MobileServiceLocalStoreException {
Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();
tableDefinition.put("id", ColumnDataType.String);
tableDefinition.put("lastupdatetime", ColumnDataType.Date);
localStore.defineTable("Tbl_ChangedTable", tableDefinition);
}
答案 0 :(得分:2)
对于问题1,您可以在本地存储中定义主键。已经回答了类似的主题,请参阅Is it possible to apply primary key on the text fields in android database和how to add primary key to text datatype in android sqlite?。从SQLite官方文档http://www.sqlite.org/datatype3.html,它只支持5种数据类型。
继续问题3,SQLite数据类型NULL
,INTEGER
,REAL
,TEXT
和BLOB
分别映射Java数据类型null
, int
&amp; long
(根据整数值的大小),double
,String
并使用JDBC函数ResultSet.getBinaryStream()
。如果要保存或读取其他数据类型,只需要在类型String
和SQLite TEXT
或BLOB
类型的其他类型之间序列化或反序列化。
问题2,MS Azure for Android Client&amp; amp;离线数据同步基于长期支持中的语言功能的最佳实践。所以MS提供指南文档以帮助开发人员轻松使用它们并避免自己实现相同的功能,请参考https://azure.microsoft.com/en-us/documentation/articles/mobile-services-android-how-to-use-client-library/和https://azure.microsoft.com/en-us/documentation/articles/mobile-services-android-get-started-offline-data/尝试这样做。
答案 1 :(得分:1)
@Nasir,
如果您想使用Azure表存储来存储数据,那么解决方案对于问题1和解决方案来说将变得非常简单。问题2,以及你不会出现第三个问题。
实际上,我们可以在Azure SQL数据库上使用主键。但是,如果要将主键同步到Azure SQL数据库,则此键应该不是Azure SQL数据库上的主键。
假设您使用azure表存储,您将同步数据并在将数据存储到其中时重新定义所有列。由于Azure表存储是No-SQL数据存储,因此它可以满足您的要求。此外,您可以将主键值存储为azure存储中的分区键或行键。 请参阅此文档,了解如何use Azure Table storage in Azure mobile Service。 如果我误解了,请告诉我。