OrmLite删除对象时注意

先看看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中两个按钮,一个增加对象,一个删除对象

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.name为jack,jack.id为0,jack.age为34。而程序启动添加到数据库中的对象是jack.name为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字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值