0

以下のコードを使用して挿入を行うために 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が初めてなので、何か不足している場合は提案してください。

4

1 に答える 1

0

dao.setAutoCommit(false)コメントでさらに情報が提供された後、問題は、終了していないかロールバックされたトランザクションを呼び出すか、開始することにより、自動コミットが無効になっているようです。

次のような try/finally パターンを使用することをお勧めします。

try {
   dao.setAutoCommit(false);
   ...
   ...
 } finally {
   dao.setAutoCommit(true);
   dao.commit();
 }
于 2012-07-03T17:30:51.237 に答える