构建基于 DB2 Everyplace 的 MIDP 应用程序
2009-11-16 00:00:00 来源:WEB开发网根据该数据表实例和其模式对象,建立该数据表记录索引,以便于高效存取数据。
在该数据表实例基础上建立记录列举对象(FastRecordEnumeration),以便遍历该数据表中各记录。
遍历数据表中记录,根据模式对象(TableMetaData),作相关操作,这当中常常牵涉到
数据流操作,会经常使用下列 4 个类的相关操作:
ByteArrayInputStream
DataInputStream
ByteArrayOutputStream
DataOutputStream
注:
数据表对象(FastRecordStore)由两部分组成,开头是模式对象(TableMetaData),余下的部分是由各个数据记录依次排列而成。在每条记录的开始,有个标志字节(Flag Byte)来表示该记录的编辑状态,该字节初始为零(0000 0000),开发人员可以在代码中根据实际需要将其设置为 ISync.ROW_ADDED,ISync.ROW_CHANGED,ISync.ROW_DELETED 等值,同步操作时 MIDP 同步引擎会根据每条记录的标志位进行插入,更新,删除等相应操作。在一条记录当中,各个列的字段值会按照数据表模式中的先后顺序依次排列。这当中有些字段的值可能允许为空,如果该字段值可以为空,则对于该字段值会首先是一个是否为空值的布尔类型标志位,开发人员可以通过 DataInputStream.readBoolean 来得到该值。如果该值为 True,则该字段为空,紧挨着的将是下个字段的值;如果该值为 False,则该字段为非空,紧挨着的将是该字段。 具体如何判断使用可以在附件 2 中的范例代码中得到。
有关几种时间类型字段的特殊处理
Date 类型
Date 类型的字段在本地数据表中是以一个整型值来表示的,我们需要通过特殊的位操作来得到其中的年、月、日值。
int dt = din.readInt(); // 得到一个 Date 类型字段
int year = dt >> 16; // 解析出"年"的值
int mon = (dt >> 8) & 0xFF; // 解析出"月"的值
int day = dt & 0xFF; // 解析出"日"的值
Time 类型
Time 类型的字段在本地数据表中也是以一个整型值来表示的,我们需要通过特殊的位操作来得到其中的时、分、秒值。
int tm = din.readInt(); // 得到一个 Time 类型字段
int hour = tm >> 16; // 解析出"时"的值
int min = (tm >> 8) & 0xFF; //解析出"分"的值
int sec = tm & 0xFF; // 解析出"秒"的值
TimeStamp 类型
TimeStamp 类型的字段在本地数据表中是以一个 8 字节长度的 long 类型值来表示的,前 4 个字节存储 Date 信息,后 4 个字节存储 Time 信息。
long ts = dinr.readLong(); // 得到一个 TimeStamp 类型字段
int dt = (int) (ts >> 32); // 得到前 4 个字节
int year = dt >> 16; // 解析出"年"的值
int mon = (dt >> 8) & 0xFF; // 解析出"月"的值
int day = dt & 0xFF; // 解析出"日"的值
int tm = (int) (ts & 0xFFFF); // 得到后 4 个字节
int hour = tm >> 16; // 解析出"时"的值
int min = (tm >> 8) & 0xFF; //解析出"分"的值
int sec = tm & 0xFF; // 解析出"秒"的值
附件 2中提供了一段简单的范例代码告诉读者如何在自己的代码中实现最基本的数据存取操作。
更多精彩
赞助商链接