OrmLiteオブジェクトを削除するときの注意

3196 ワード

まずBeanの定義を見てみましょう.
package com.example.bean;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "user")
public class UserBean {
	@DatabaseField(generatedId=true)
	public int id;
	@DatabaseField(columnName = "name")
	public String name;
	@DatabaseField(columnName = "age")
	public int age;

}

MainActivity.JAvaの2つのボタン、1つの追加オブジェクト、1つの削除オブジェクト
package com.example.xman;

import java.util.List;

import com.example.bean.UserBean;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	Button btnQuery;
	Button btnDel;
	UserBeanDao userBeanDao;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnQuery = (Button) findViewById(R.id.btn_query);
		btnDel = (Button) findViewById(R.id.btn_del);
		userBeanDao = new UserBeanDao(this);
		
		UserBean jack = new UserBean();
		jack.name = "jack";
		jack.age = 34;
		
		userBeanDao.save(jack);
		btnQuery.setOnClickListener(this);
		btnDel.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.btn_query) { //  
			List<UserBean> userlist = userBeanDao.findAll();
			for (UserBean userBean : userlist) {
				System.out.println(userBean.id + " " + userBean.age + userBean.name);
			}
		} else if (v.getId() == R.id.btn_del) { //  
			UserBean jack = new UserBean();
			jack.name = "jack";
			jack.age = 34;
			userBeanDao.delete(jack);
		}
	}

}
シナリオ:ここで新しく追加されたオブジェクトを削除したい.btn_をクリックするとdelの後、btn_をクリックします.query,logcatではさっきのオブジェクトは削除されていません.
これはなぜですか.
実はここでUserBeanの定義を見て、中にidフィールドがあります.削除するときは、このフィールドを設定する必要があります.
else if (v.getId() == R.id.btn_del) { //  
			UserBean jack = new UserBean();
			jack.name = "jack";
			jack.age = 34;
			userBeanDao.delete(jack);
		}
このコードのUserBeanオブジェクトは、実はjackです.名前はjack、jackです.idは0、jack.ageは34です.プログラム起動がデータベースに追加するオブジェクトはjackである.名前はjack、jackです.idは1、jack.ageは34.
だから削除に成功しませんでした.正しい書き方は次のとおりです.
else if (v.getId() == R.id.btn_del) { //  
			UserBean jack = new UserBean();
			jack.name = "jack";
			jack.age = 34;
<span style="white-space:pre">			</span>jack.id = 1;
			userBeanDao.delete(jack);
		}

(2)UserBeanの定義を以下のように変更するとidフィールドを削除する.
package com.example.bean;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "user")
public class UserBean {
	@DatabaseField(columnName = "name")
	public String name;
	@DatabaseField(columnName = "age")
	public int age;

}
それから削除して、報告が間違っていることに気づきました.理由プロンプトにidフィールドが欠けています.
ソースコードを表示し、Ormliteはdeleteを実行し、idフィールドが必要です.だからbeanを定義するときはidフィールドを省かないでください.