PRIMARY KEY와 UNIQUE KEY 차이점을 막상 얘기하라고 하면 나에게는 조금 헷갈렸기 때문에

공부후에 내가 생각하는 결정적 차이점을 얘기해보려 한다. 

 

PRIMARY KEY(기본키)

-테이블 데이터를 구분짓는 ID에 사용하는 키

-NULL값을 허용하지 않는다. NOT NULL로 반드시 값을 입력해야 한다.

-값이 중복되지 않는다.

 

-예를들어 ID_NO는 PRIMARY KEY이다.

 컬럼 ID_NO가 있다면 ID_00000 과 같은 데이터라고 볼 수 있다.

 

UNIQUE KEY(고유키)

-중복되지 않아야 하는 데이터(데이터만이 가지고 있는 유일한 정보 : 주민번호)에 사용하는 키

-NULL값 허용

-값이 중복되지 않는다.

 

글작성기능을 만들어볼 것이다.

 

1. write.jsp를 생성한다.

내용은 latest.jsp내용 기반에서 수정을 하면서 만들 것이다.

 

2. 게시판 글쓰기 양식을 작성한다.

1) 글쓰기 양식을 form틀 안에 두게 한다. submitwriteAction으로 갈 수 있도록..

 

2) 테이블 테두리를 디자인 한다.

 

3) 글쓰기 양식 제일 윗부분을 디자인한다.

 

4) 제목을 넣는 줄을 디자인하고 입력할 수 있도록 한다.

 

5) 글내용을 넣는 줄을 디자인하고 입력할 수 있도록 한다.

 

6) 글작성완료 버튼을 누름으로서 제출을 할 수 있도록 작성한다.

 

사진

 

화면 출력

 

3. LatestDAO 클래스(데이터베이스 접근객체)를 생성하고, 데이터베이스에 접근할 수 있도록 구문    을 작성한다.

 

 

4. LatestDAO클래스에 함수를 3개를 작성해 준다.

 

1)게시글 작성시 현재 서버시간을 가져오는 함수

 

여러개 함수가 필요하므로, 각각 함수끼리 데이터베이스에 접근하는데 있어서

마찰이 일어나지 않도록 pstmt를 함수 내에 작성한다.

 

-String SQL = "SELECT NOW(); ->현재의 시간을 가져오는 mysql문장이다.

 

-현재 연결되어 있는 conn.객체를 이용해서 SQL문장을 실행준비단계로 만들어준다.

PreparedStatement pstmt = conn.prepareStatement(SQL);

 

-실제로 사용했을 때 나오는 결과가 나오도록 작성

rs = pstmt.executeQuery();

 

-결과가 있는 경우에 1이 있도록 해서 현재의 날짜를 반환해줄 수 있도록 한다.

if (rs.next()) {

return rs.getString(1);

}

 

사진

 

2)게시글 작성시 게시글 번호를 가져오는 함수

 

여러개 함수가 필요하므로, 각각 함수끼리 데이터베이스에 접근하는데 있어서

마찰이 일어나지 않도록 pstmt를 함수 내에 작성한다.

 

-String SQL = "SELECT latestID FROM FROM LATEST ORDER BY latestID DISC;

->가장 내림차순으로 제일 마지막에 작성한 게시글ID를 가져오도록 하는 SQL

 

-현재 연결되어 있는 conn.객체를 이용해서 SQL문장을 실행준비단계로 만들어준다.

PreparedStatement pstmt = conn.prepareStatement(SQL);

 

-실제로 사용했을 때 나오는 결과가 나오도록 작성

rs = pstmt.executeQuery();

 

-나온 결과에 1을 더해서 다음 게시글에 번호에 들어가질 수 있도록 한다.

if (rs.next()) {

return rs.getString(1) + 1;

}

 

-쓰이는 게시글이 없을 경우 결과가 나오지 않으니 첫 번째 게시물이라는 것을 1로 표기한다.

return 1;

 

-데이터베이스 오류가 발생했을 때 -1이 나오도록 한다.

 

 

사진

 

3) 게시글을 작성하는 write라는 함수를 작성한다.

5. writeAction.jsp를 만든다.

 

1)LatestDAO에서 데이터베이스에 접근할 수 있도록 한다.

2)게시글 제목 및 게시글 내용을 받아오는 설정을 한다.

사진

3)로그인 된 사람만 글작성 할 수 있는 구문을 작성한다.

4)제목과 내용을 작성하지 않았다면 메시지가 나오도록 한다.

5)작성한 제목 및 내용 그리고 userID를 받아오지 못할 경우 메시지가 나오도록 한다.

6)작성한 제목 및 내용 그리고 userID를 받아올 경우 main.jsp로 넘어가게 한다.

7)마주한 에러(글작성을 실패했습니다.)

java.sql.SQLSyntaxErrorException: Table 'jsp.latest' doesn't exist

 

사진

 

확인해본것

 

-writeAction페이지에서 나와주어야 할 메시지가 나오는지 확인. 나온다.

-LatestDAO내에 관련 함수에서 작성한 쿼리문 등 이상이 없는지 확인. 이상이 없다.

 

문제해결

JSP 데이터베이스 안에 테이블을 생성해 주었어야 했는데 밖에 따로 테이블을 만들어놓았기 때문에

jsp.table이 존재하지 않는다는 에러메세지가 나온 것이었다.

 

문제를 알게 된 이유

mysql내에 데이터베이스를 건너건너 다니다보니 에러메세지에서 힌트를 얻었다.

 

8)게시글이 데이터베이스 입력이 되었다.

아직까진 목록에 작성된 글이 보이지 않는다. 목록글을 보이도록 해주어야 한다.

 

글을 작성하고 글작성하기 버튼을 누른다.

작성한 게시글이 데이터베이스에 저장이 되었다.

 

아직까지는 작성한 글 목록 및 내용이 보이지 않는다.

다음에는 이 작업을 할 것이다.

이번에는 회원가입기능을 구축해 볼 것 이다.

 

 

DAO(Database Access Object)에서 mysql에 접근하는 try catch문이 있으며

로그인을 시도하는 함수코드를 작성해놓았다. 바로 밑에 회원가입 함수코드를 작성한다.

 

 

1. userDAO클래스에 추가적으로 회원가입을 시도하는

   join(회원가입)함수코드를 작성할 것이다. 함수를 작동하도록 user매개변수를 넣어둔다.

 

 

사진

 

 

2. 회원가입 양식에서 작성완료후 회원가입 버튼을 누르면 다음처럼 화면이 뜬다.

  아직 joinAction.jsp를 만들지 않았기 때문이다.

 

joinAction.jsp 페이지

 

3. joinAction.jsp에서 loginAction에서 jsp.Property에서 userIDuserPassword

  설정해주었던 것을 이번에는 회원가입양식에서 받아오는 데이터를 JPS로 설정해주기로 한다.

 

 

4. joinAction페이지에서 입력받은 아이디를 아이디, 비번, 이름, 성별, 이메일주소가

   입력이 안되었을 경우에 각각 입력이 안되었다는 메시지가 뜨도록 작성하고,

   userDAO 인스턴스를 생성하여 받은 데이터를 userDAO클래스를 통해 데이터베이스

   정보와 비교해서 아이디 중복인지를 확인하고 아닐 경우 회원가입이 완료되도록 만든다.

 

사진

 

5. 회원가입 화면 출력 및 각각의 상황에 맞는 메시지 출력확인

 

사진

 

사진

 

사진

 

완료!

+ Recent posts