개발공부
[mysql] SQL 오류 (1452): Cannot add or update a child row: a foreign key constraint fails
==>참조무결성에 따라 참조키는 항상 부모키에 해당하는 값만 넣을 수 있다.
참조받는 테이블의 데이터를 먼저 삽입해서 발생한 오류. 데이터를 삭제한 뒤 참조키 설정하였다.
[mysql] foreign key constraint is incorrectly formed (errno:150)
SQL 오류 (1005): Can't create table 'mydrug.#sql-950_9' (errno: 150)
Foreign key constraint is incorrectly formed
외래키를 설정할 때 참조데이터가 다를 경우 발생하는 오류
1. 데이터 타입이 같은지 확인 (unsigned/signed)INT,VARCHAR 등
2. NULL값 허용여부 확인
3. 참조받는 데이터가 unique, primary key 가 아닌지 확인
4. 테이블의 조합확인
->하나는 euckr_korean_ci 하나는 utf_general_ci 여서 오류가 발생했다.
35DAY / mysql / TRANSACTION
TRANSACTION 트랜잭션
OldidDao.java : Oldid DB에 id값을 저장하는 클래스
CustomerService.java : 회원을 삭제와 동시에 데이터베이스에 추가하는 클래스
둘 중 하나가 실패시 ROLLBACK을 하고
성공했을 때 COMMIT을 한다.
package Service;
import java.sql.Connection;
import java.sql.SQLException;
public class CustomerService {
private DBService dbservice;
private CustomerDao customerDao;
private OldidDao oldidDao;
//java실행시 바로실행
public CustomerService(){
dbservice = new DBService();
}
public void removeCustomer(int id){
customerDao = new CustomerDao();
oldidDao = new OldidDao();
Connection conn = null;
try{
conn=dbservice.getConnection();
customerDao.deleteCustomer(dbservice,conn, id);
oldidDao.insertId(dbservice, conn, id);
conn.commit();
}
catch (SQLException e){
e.printStackTrace();
try{
conn.rollback();
}catch (SQLException e1) {
e1.printStackTrace();
}
}
finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
package Service;
import java.sql.*;
public class OldidDao {
public int insertId(DBService dbservice, Connection conn,int id) throws SQLException{
int returnRow = 0;
PreparedStatement stmt = null;
stmt = conn.prepareStatement("INSERT INTO oldid(id) VALUES (?)");
stmt.setInt(1, id);
returnRow=stmt.executeUpdate();
return returnRow;
}
}
34DAY / DAO,DTO / 검색처리, 로그인처리
public String mLoginCheck(String in_id,String in_pw) : 로그인체크
public Member mGetForSession(String in_id) : 로그인 성공 한 회원 체크
login_pro.jsp
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
Mdao mdao = new Mdao();
String loginresult = mdao.mLoginCheck(id, pw);
switch(loginresult){
case "로그인성공" :
Member m = mdao.mGetForSession(id);
session.setAttribute("S_NAME", m.getM_name());
session.setAttribute("S_LEVEL", m.getM_level());
session.setAttribute("SID", m.getM_id());
%><script language="javascript">
alert("로그인성공");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
case "비밀번호불일치" :
%>
<script language="javascript">
alert("비밀번호불일치");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
case "아이디불일치" :
%>
<script language="javascript">
alert("아이디불일치");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
}
%>