异常处理系列: android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

出现这个异常的时候,可以先肯定是你对android数据库操作的时候出问题了。

情况1:你定义的字段为 not null而插入时对应的字段却没值。

情况2:你定义的字段设定PRIMARY,而插入的值已经在表中存在。


先说说我遇到的情况吧,类似如下:

两张表:部门表(Depart)和员工表(Employee)

Depart:departId,departName
Employee:employeeId,employeeName,foreignDepartId

public void add(Employee em,Depart dp){
	SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
	//把部门插入到表中
	db.execSQL("insert into Depart(departId,departName) values(?,?)",  
		                new Object[]{dp.getDepartId(),dp.getDepartName()}); 
	//把员工插入到这个部门中
	db.execSQL("insert into Employee(employeeId,employeeName,foreignDepartId) values(?,?,?)",  
		                new Object[]{em.getEmployeeId(),em.getEmployeeName,dp.getDepartId()});						
}

上边这个是写在业务层的,是一个增加的方法

然后我们在测试程序里边调用的时候:
private Service service = new Service();
public void testAdd(){
	Depart dp = new Depart(1,"外交部");
	Employee em = new Employee(1,"张三",dp.getDepartId());
	
	service.add(em,dp);
}
按照上边的来说,第一条数据是可以插入的。


但是,如果我们把testAdd()函数里边的Employee em = new Employee(1,"张三",dp.getDepartId());这条语句中的1换成2之后,再插入就会出错:

因为在插入Employee对象的时候Depart对象也要再插入一遍,但是数据库中是有这个对象对应的Id了。

所以,这里我们要在add()中加入一个查询,查询Dept对象对应的id在数据库中是否存在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值