개발공부

==>참조무결성에 따라 참조키는 항상 부모키에 해당하는 값만 넣을 수 있다.


참조받는 테이블의 데이터를 먼저 삽입해서 발생한 오류. 데이터를 삭제한 뒤 참조키 설정하였다.

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

2017. 5. 24. 14:45

TRANSACTION 트랜잭션

몇 단계로 처리를 나누어하는 SQL 명령을 실행하는 경우에 트랜잭션을 사용한다.
트랜잭션을 이용하여 연산을 수행할 때 에러가 발생하면 Rollback 이 되어 종료된다.
롤백하면 트랜잭션 내에서 행해진 변경사항들이 모두 취소된다.
아무런 에러가 발생하지 않을경우만 Commit이 되어 변경사항이 적용된다.




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;

      }

}

 

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;

       }

%>

 


+ Recent posts