我正在使用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类作为参数 . 我们必须在哈希映射中再次定义并传递它 . 为什么会这样?或者还有其他方法吗?
私人MobileServiceTable mToDoTable;和public void defineTable(String tableName,Map columns)
编辑:我知道sqlite支持主键,但看起来像azure不支持 . 我没有看到任何使用主键创建表的规定
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);
}
- 有什么地方可以看到Azure / Android / Sqlite之间的数据类型映射? Azure显示Number,Data as column type,我应该在Table类中使用Number(我可以使用Number,Java的Date类)然后最终我应该从ColumnDataType中选择什么数据类型
2 回答
@Nasir,
如果您希望使用Azure表存储来存储数据,则问题1和问题2的解决方案将变得简单,并且您将不会出现第三个问题 .
实际上,我们可以在Azure SQL数据库上使用主键 . 但是,如果要将主键同步到Azure SQL数据库,则此键应该是一个字段,而不是Azure SQL数据库上的主键 .
假设您使用azure表存储,您将同步数据并在将数据存储到其中时重新定义所有列 . 由于Azure表存储是No-SQL数据存储,因此它可以满足您的要求 . 此外,您可以将主键值存储为azure存储中的分区键或行键 . 请参阅此文档有关如何use Azure Table storage in Azure mobile Service . 如果我误解了,请告诉我 .
对于问题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
&long
(根据整数值的幅度),double
,String
以及使用该JDBC功能ResultSet.getBinaryStream()
. 如果要保存或读取其他数据类型,只需要在类型String
和SQLiteTEXT
或BLOB
类型的其他类型之间序列化或反序列化 .对于问题2,由MS Azure为Android客户端和离线数据同步设计的MobileService API基于长期支持中的语言功能的最佳实践 . 所以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/尝试这样做 .