应用程序重新启动后,插入的行丢失

时间:2012-07-01 17:45:42

标签: android ormlite

我正在使用ORMLite使用以下代码进行插入:

protected void registerUser(EditText fullName, EditText email, EditText mobile, EditText username, EditText password) {
        //Perform DB Call to Insert Records                 
        User user = new User();
        user.setFullName(fullName.getText().toString());
        user.setEmail(email.getText().toString());
        user.setMobile(mobile.getText().toString());
        user.setUsername(username.getText().toString());
        user.setPassword(password.getText().toString());

        DBManager.getInstance().addUser(user);
    }

但重新启动应用程序后,上述记录丢失,我的登录失败。 我使用以下代码进行身份验证,它适用于现有记录。

public boolean login(String username, String password) {
    boolean validLogin = false;
    try {           
        QueryBuilder<User, Integer> qb = getHelper().getUserDao().queryBuilder();           
        qb.where().eq("username", username).and().eq("password", password);         
        PreparedQuery<User> pq = qb.prepare();
        User user = getHelper().getUserDao().queryForFirst(pq);    
        if(user!=null){
            validLogin = true;
        }           
    } catch (SQLException e) {e.printStackTrace();}
    return validLogin;
}

在我的助手课程中,我只在不可用时才创建表格。

TableUtils.createTableIfNotExists(connectionSource, User.class);

ORMLite如何处理提交操作?我们必须手动提交吗?请建议如果我错过了一些东西,因为我是Android和ORMLite的新手。

1 个答案:

答案 0 :(得分:0)

在评论中提供了更多信息之后,问题似乎是通过调用dao.setAutoCommit(false)或启动从未完成或已回滚的事务来禁用自动提交。

建议使用如下所示的try / finally模式。

try {
   dao.setAutoCommit(false);
   ...
   ...
 } finally {
   dao.setAutoCommit(true);
   dao.commit();
 }