2013-11-20 150 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表中不存在。所以檢查一下。

相關問題