Java 在ActiveAndroid中,是否可以更新表行中的特定字段而不删除行中的其余数据
ActiveAndroid: 如果每次没有为所有字段保存()数据,我需要在不清除行中任何现有数据的情况下将更新推送到特定的表字段 例如: 我有一个名为“user”的表,其中包含以下字段: extSrc | extId | email | firstName | lastName | role | photo | userId |已验证 如果我将数据保存到除“已验证”之外的所有字段,然后我以后只需要更新已验证字段-这可能吗 当前,当我使用下面的代码时,除了userId(我在本地存储)和verified之外的所有字段都会被填充,所有其他字段都会被清除。在我有需要更新的已验证值时,我没有要推送/保存的其他用户数据(),因此我只需要在用户ID与用户表中的用户ID匹配时更新特定的“已验证”字段,并保留该用户的所有其他字段 我的代码: 型号:Java 在ActiveAndroid中,是否可以更新表行中的特定字段而不删除行中的其余数据,java,android,mobile,activeandroid,Java,Android,Mobile,Activeandroid,ActiveAndroid: 如果每次没有为所有字段保存()数据,我需要在不清除行中任何现有数据的情况下将更新推送到特定的表字段 例如: 我有一个名为“user”的表,其中包含以下字段: extSrc | extId | email | firstName | lastName | role | photo | userId |已验证 如果我将数据保存到除“已验证”之外的所有字段,然后我以后只需要更新已验证字段-这可能吗 当前,当我使用下面的代码时,除了userId(我在本地存储)和verifi
// define table name
@Table(name = "User")
public class User extends Model
{
// define table columns
@Column(name = "extSrc")
public String extSrc;
@Column(name = "extId")
public String extId;
@Column(name = "email")
public String email;
@Column(name = "firstName")
public String firstName;
@Column(name = "lastName")
public String lastName;
@Column(name = "role")
public String role;
@Column(name = "photo")
public String photo;
@Column(name = "userId", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
public String userId;
@Column(name = "verified")
public String verified;
}
controller:
public class UserAdapter implements JsonDeserializer {
@Override
public User deserialize(JsonElement arg0, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
User u = new User();
Log.v("user", u.toString());
JsonObject j = (JsonObject) arg0;
Log.v("j", j.toString());
if(j.has("extSrc"))
{
u.extSrc = j.get("extSrc").getAsString();
Log.v("extSrc", u.extSrc);
}
else
{
Log.v("extSrc", "does not exist");
}
if(j.has("extId"))
{
u.extId = j.get("extId").getAsString();
Log.v("extId", u.extId);
}
else
{
Log.v("extId", "does not exist");
}
if(j.has("email"))
{
u.email = j.get("email").getAsString();
Log.v("email", u.email);
}
else
{
Log.v("email", "does not exist");
}
if(j.has("firstName"))
{
u.firstName = j.get("firstName").getAsString();
Log.v("firstName", u.firstName);
}
else
{
Log.v("firstName", "does not exist");
}
if(j.has("lastName"))
{
u.lastName = j.get("lastName").getAsString();
Log.v("lastName", u.lastName);
}
else
{
Log.v("lastName", "does not exist");
}
if(j.has("role"))
{
u.role = j.get("role").getAsString();
Log.v("role", u.role);
}
else
{
Log.v("role", "does not exist");
}
if(j.has("photo"))
{
u.photo = j.get("photo").getAsString();
Log.v("photo", u.photo);
}
else
{
Log.v("photo", "does not exist");
}
if(j.has("userId"))
{
u.userId = j.get("userId").getAsString();
Log.v("userId", u.userId);
}
else
{
Log.v("userId", "does not exist");
}
if(j.has("verified"))
{
u.userId = SpontlyApplication.PREFS_USER_ID;
u.verified = j.get("verified").getAsString();
Log.v("verified", u.verified);
}
else
{
u.verified = "true";
Log.v("verified", "does not exist");
}
u.save();
}
谢谢。如果要更新数据库中已有的用户,需要首先从数据库中检索该用户,并在调用save()之前更新其字段 比如:
User user = new Select().from(User.class).where("userId = ?", userIdYouWantToRetrieve).executeSingle();
if (user != null){
user.setVerified(true);
} else {
user = new User(){//populate your new user here from json }
}
user.save();
这将保持用户值与以前存储在数据库中的值相同,并且您将只更新所需的新值。非常重要的注意:记住ActiveAndroid中有一个缓存(除非您更改代码以禁用缓存或清除缓存)因此,如果在代码的某个部分检索用户并更改其字段而不打算保存数据,而在另一个代码部分中再次检索用户,则会得到缓存的用户,其中包含您所做的更改。此时保存用户将保存所有以前的更改和您所做的新更改。