2013-11-20 241 views
0

我有一个拥有多个地址和多个电话的用户。 我使用mysql和spring。 当我更新用户时,我删除了它的地址和电话,并插入数据。删除并插入,而不是更新

更新用户 删除地址 删除电话

插入地址 插入电话

create table user(
    user_id INT NOT NULL AUTO_INCREMENT, 
    usertitle varchar(100), 
    hasphones boolean, 
    PRIMARY KEY (user_id) 
); 

create table address_user(
    address_user_id INT NOT NULL AUTO_INCREMENT, 
    addresstitle varchar(100), 
    addressstr varchar(5000), 
    showcolumn boolean, 
    usephones boolean, 
    user_id int not null, 
    PRIMARY KEY (address_user_id), 
    KEY `user_id` (`user_id`), 
    CONSTRAINT `address_user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) 
); 


create table phone_user(
    phone_user_id INT NOT NULL AUTO_INCREMENT, 
    typeParameter int, 
    phonelabel varchar(25), 
    user_id int not null, 
    PRIMARY KEY (phone_user_id), 
    KEY `user_id` (`user_id`), 
    CONSTRAINT `phone_user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) 
); 

我得到这个错误

EX =(org.springframework.web.util.NestedServletException)组织.springframework.web.util.NestedServletException:

要求处理失败;嵌套异常是org.springframework.dao.DataIntegrityViolationException:PreparedStatementCallback; SQL [insert into address_user(addresstitle,addressstr,showcolumn,usephones,user_id)values(?,?,?,?,?)];

不能添加或更新子行,外键约束失败;(baseaddress_user,约束address_user_ibfk_1外键(user_id)参考文献useruser_id)。) 嵌套异常是com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:

删除Java的代码

StringBuffer sb = new StringBuffer(); 
sb.append(" delete from address_user where user_id = ? "); 
jdbcTemplate.update(sb.toString(), id); 

StringBuffer sb = new StringBuffer(); 
sb.append(" delete from phone_user where user_id = ? "); 
jdbcTemplate.update(sb.toString(), id); 

插入代码

StringBuffer sb = new StringBuffer(); 
sb.append(" insert into phone_user ("); 
sb.append(" typeparameter, phonelabel, user_id) "); 
sb.append(" values (?, ?, ?) "); 
jdbcTemplate.update(sb.toString(), phone.getTypeParameter().getValue(), phone.phonelabel(), phone.getUser_id()); 

StringBuffer sb = new StringBuffer(); 
sb.append(" insert into address_user ("); 
sb.append(" addresstitle, addressstr, showcolumn, usephones, user_id) "); 
sb.append(" values (?, ?, ?, ?, ?) "); 

ĴdbcTemplate.update(sb.toString(), address.getAddressTitle(),address.getAddressStr(),address.getShowColumnName(),address.getUsePhones(),phone.getUser_id());

我真的不明白,我不做更新,我删除并插入。

+0

请添加所有相关的Java代码 – reto

回答

1

我会确保在address_user表的插入查询中有正确的address_user.user_id。此外,请尝试从MySql管理控制台(或任何其他可用于直接访问数据库的数据库工具)的查询来验证它是否正常。

错误说“无法添加或更新...”,所以我认为它插入失败。

1

错误表明Foreign Key错误,这意味着您正试图在引用注册表的其他表中不存在的表中插入某些内容。

您试图在address_user表上插入的user_id在user表中不存在。所以检查一下。

相关问题