今天有一个需求是:
用json格式同步数据库中用户的数据到服务器。然后用户重新安装程序时,更新用户的数据。
在调试时遇到一个问题,数据库的表中有的字段数值是空的。而
JSONObject对象赋值时,是不允许传空值进去的。
传了空值会抛出异常。
String checkName(String name) throws JSONException {
if (name == null) {
throw new JSONException("Names must be non-null");
}
return name;
}
取值时如果没有对应的值也会抛出异常。
public Object get(String name) throws JSONException {
Object result = nameValuePairs.get(name);
if (result == null) {
throw new JSONException("No value for " + name);
}
return result;
}
有没有什么好办法解决这个问题呢?
方法1:
用默认值。
如果数据库的表中字段为空,则用默认值代替。如“null” 字符串;
这样的好处是,存,取的逻辑可以 共用和其它数据一样的 api。
坏处是:
破坏了原来的数据结构。
数据库中空值和 “ ” 是不一样的,和“null” 更是不一样的。
可能会造成其它一些问题。
方法2:
用默认值 + 业务逻辑进行区分。
字段为空的条目,肯定和其它条目有不一样的 业务逻辑。
保存到服务端:用默认值传输到服务端。
从服务端获取后插入本地数据库:用业务逻辑区分后,操作非空数据。
这样的好处是不会改变数据库的数据结构。
也可以复用之前业务逻辑的api。