메뉴 건너뛰기

조회 수 30692 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

JSP 게시판 만들기 - 구현 (Method, Query 기초)

 

전에 정리했던 데이터베이스와의 연동 소스에 대해 자세히 알아보고, 질의문에 대해 알아보자. (질의문은 이번게시판에 사용되는 것에 대해서만 다룰 것이다.

 

함수 (Method)

게시판 만들기에서 주로 사용하는 함수에 대해 기능과 개념을 정리 하자.

 

    Class.forName("com.mysql.jdbc.Driver");

    Connection conn = DriverManager.getConnection(

                                    "jdbc:mysql://127.0.0.1:3306/stone", "root", "1234");

 

Class.forName(인자) 메소드를 통해 인자에 해당하는 클래스를 로드 즉, 읽혀지고 이 로드된 Drvier 클래스는 DriverManager 내에서 사용할 수 있게 됩니다. 이 인자의 클래스는 우리가 mysql *.jar 파일에 위치해 있다. 클래스가 없거나, 데이터베이스 접속이 실패하면 ClassNotFoundException or SQLException 예외가 발생한다.

 

 

    PreparedStatement pstmt = conn.prepareStatement(

        "INSERT BOARD INTO (SUBJECT, WRITER, CONTENTS) VALUES (?, ? , ?)");

    pstmt.setString(1, "제목");

    pstmt.setString(2, "작성자");

    pstmt.setString(3, "내용"); or pstmt.setInt(3, 0);

 

prepareStatement(인자) 메소드는 질의문이 들어가게 되는 데 이 질의문에 "?"에 대한 값이 있을 경우 setString() or setInt() 메소드를 이용해 바인딩 해줘야 한다. 이 바인딩은 "?" 순서와 일치해야하고 1부터 시작한다. (컬럼 타입이 문자열인 경우 setString(), 숫자인 경우 setInt()를 사용한다.)

 

 

 

    PreparedStatement pstmt = conn.prepareStatement(

        "SELECT * FROM BOARD WHERE NUM = ?");

    pstmt.setInt(1, 1);

    ResultSet rs = pstmt.executeQuery();

    rs.next();

    rs.getInt("NUM"); or rs.getInt(1);

    rs.getString("SUBJECT"); or rs.getString(2);

 

BOARD 테이블의 NUM 컬럼 값이 1 인 것을 조회해오는 질의문이다. 이 소스의 내용을 그림으로 표현하면 아래와 같다.

 

 

 

    int row = pstmt.executeUpdate();

 

이 executeUpdate() 함수는 INSERT, DELETE, UPDATE 질의문을 실행할 때 사용하는 함수로 실행 후 결과값으로 질의문 실행에 변경된 행의 갯수를 반환한다. 예를 들어 게시물 삭제가 3건이 되었다면 3을 반환한다.

 

 

    int pageNumTemp = Integer.parseInt("값");

 

Integer.parseInt(인자) 함수는 문자열의 인자를 int형으로 형변환하는 함수이다. 만약 문자열 "123" 이라면 int형 123 으로 변환하는 것이다. 만약 문자열 값이 숫자가 아닌 경우에는 NumberFormatException 예외를 발생 시킨다.

 

 

    String searchTextUTF8 = new String(searchText.getBytes("ISO-8859-1"), "UTF-8");

 

searchText의 문자열을 ISO-8859-1 캐릭터셋 바이트로 얻은 후 UTF-8로 변환하는 과정이다. 이 내용은 게시판의 검색어를 GET 방식으로 전송 한 후 한글이 깨지므로 UTF-8 캐릭터셋으로 변환해 한글깨짐을 방지하기 위함이다. 예전에 작성한 재미있는 JSP 한글 처리 이야기는 여기를 참고하자.

 

 

    rs.getString("REG_DATE").substring(0, 10)

 

substring(0, 10) 메소드는 0부터 10번째 까지 문자열을 잘라 얻는다. 

 

 

 

    "".equals(searchText)

 

이 equals(인자) 메서드는 깊이 들어가면 헤깔릴 수 있고, 쉽게 생각하면 간단하다. equals(인자) 메소드는 값을 비교하고, 비교연산자인 "==" 인스턴스를 비교 한다. 객체가 참조하고 있는 인스턴스 주소가 같은 지를 비교 한다. 깊이 들어가면 복잡하니 일단 단순히 값을 비교한다고 생각하자.

 

Query (질의문)

질의문은 여러 데이터베이스들과 유사하다. MySQL 데이터베이스의 질의문을 익힌다면 다른 데이터베이스들의 질의문도 같기 때문에 어려움이 없을 것이다. 하지만, 함수들은 다르다는 걸 명심하자.

 

 

SELECT

데이터베이스 테이블의 하나 이상의 행을 조회해 오기 위해 사용 한다. 게시판 만들기에서는 목록조회, 상세조회, 수정폼에서 사용하게 된다.

 

    // 테이블명(BOARD)의 모든 행을 조회한다. 컬럼..n 으로 작성한 열만 불러온다.

    SELECT 컬럼..n FROM 테이블명

    // 컬럼 = 값의 조건에 해당하는 모든 행을 조회한다.

    SELECT 컬럼..n FROM 테이블명 WHERE 컬럼 = 값

    // 컬럼 = 값의 조건에 해당하는 모든 행을 컬럼 올림차순으로 조회한다. (ex 1, 2, 3, 4)

    SELECT 컬럼..n FROM 테이블명 WHERE 컬럼 = 값 ORDER BY 컬럼 ASC

    // 컬럼 = 값의 조건에 해당하는 모든 행을 컬럼 내림차순으로 조회한다. (ex 5, 4, 3 , 2, 1)

    SELECT 컬럼..n FROM 테이블명 WHERE 컬럼 = 값 ORDER BY 컬럼 DESC

    // 컬럼 = 값의 조건에 해당하는 모든 행중에 LIMIT 값 ~ 값 만큼 행을 조회한다.

    // 예를 들어 LIMIT 10, 10 일시 10번째 행부터 10건의 데이터를 조회한다.

    SELECT 컬럼..n FROM 테이블명 WHERE 컬럼 = 값 ORDER BY 컬럼 DESC LIMIT 값, 값

    // 검색컬럼의 데이터 중에 '값'이 있는 경우의 행을 조회 한다.

    // 예를 들어 SUBJECT LIKE '%돌%' 이다, BOARD 테이블의 SUBJECT 컬럼에 값이 

    // "안녕하세요 돌 입니다" 라고 있다고 하면 이 테이블의 행은 조회해 온다.

    SELECT 컬럼..n FROM 테이블명 WHERE 검색컬럼 LIKE '%값%'

    // * 의  의미는 테이블명(BOARD)의 모든 행을 조회하고, 모든 열을 불러온다.

    SELECT * FROM 테이블명

 

Tip - LIMIT 질의문은 데이터베이스 마다 다르다.

 

INSERT

데이터베이스 테이블에 값을 등록할 때 사용 한다. 게시판 만들기에서는 게시물을 등록할 때 사용하게 된다. 

 

    // 컬럼의 순서와 값의 순서를 일치해야 원하는 컬럼에 값이 들어간다.

    INSERT 테이블명 INTO (  컬럼1, 컬럼2, 컬럼3 ) VALUES ( 값1, 값2, 값3 )

 

Tip - NUM 컬럼의 Auto Increment 설정되어 있어 INSERT 행위가 이루어질 시 1씩 증가한 값이 들어가게 된다. 이 값은 중복되지 않기 때문에 테이블의 PK로 선언되는 경우가 많다. 

 

UPDATE

데이터베이스 테이블에 값을 수정할 때 사용 한다. 게시판 만들기에서는 게시물을 수정, 조회수 증가시에 사용하게 된다.

 

    // 컬럼 = 값 즉, 컬럼에 값을 대입하는 형태로 기존의 값이 수정된다. 

    UPDATE 테이블명 SET 컬럼 = 값, 컬럼 = 값 WHERE 컬럼 = 값

    // WHERE 에 대한 조건문이 없다면 테이블의 컬럼 값이 모드 변경되므로 주의하자.

    UPDATE 테이블명 SET 컬럼 = 값, 컬럼 = 값 

 

 

DELETE

데이터베이스 테이블에 값을 삭제할 때 사용 한다. 게시판 만들기에서는 게시물을 삭제시에 사용하게 된다.

 

    // 테이블명(BOARD)에서 컬럼 = 값에 대한 행을 삭제 한다.

    DELETE FROM 테이블명 WHERE 컬럼 = 값

    // WHERE 에 대한 조건문이 없다면 테이블의 모든 행이 삭제되므로 주의하자.

    DELETE FROM 테이블명

 

 

MySQL Query 함수들

 

    // COUNT() 함수는 테이블의 행 갯수를 얻는 함수이다. 이 함수안에 * 또는 컬럼명을 넣을 수

    // 있고, 해당하는 열에 대한 행의 갯수를 얻는다.

    // AS 별칭컬럼의 의미는 조회된 결과값이 담기는 컬럼명이 별칭컬럼인 것이다. 

    // 이 별칭컬럼은 실제 존재하지 않고 임의로 개발자가 만들 수 있다.

    SELECT COUNT(컬럼) AS 별칭컬럼 FROM 테이블명

    // CONCAT() 함수는 값1, 값2, 값3의 값을 합치는 함수이다.

    // 예를들어 CONCAT('%', '돌', '%') 이라면 '%돌%' 인 것이다.

    CONCAT(값1, 값2, 값3)

    // 현재 서버(PC)의 날짜를 가져온다.

    NOW()

 

 

요즘에는 다양한 라이브러리, 또는 프레임워크 오픈소스들이 많은 데 이런 오픈소스들도 여러개의 클래스, 클래스안에는 다양한 변수와 메소드들로 이루어진다. 그 함수와 변수의 쓰임새를 잘 이해하고 사용한다면 소스가 간결해지고, 생산성이 좋아지지 않을까 생각 된다. 

 

 

다음은 게시판 만들기의 파라미터 전송에 대한 부분을 정리해보자. 


List of Articles
번호 제목 날짜 조회 수
65 Oracle Database DB연결, table 생성 file 2017.09.11 4338
64 JSP 동작 원리, 내부 객체 file 2017.09.12 3632
63 스크립틀릿(Scriptlet), 선언(declaration), 표현식(expression) file 2017.09.12 3690
62 지시자(Directive) file 2017.09.12 3248
61 주석(comments) file 2017.09.12 3176
60 request, response file 2017.09.12 3535
59 JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성) file 2017.09.12 5054
58 JSP 게시판 만들기 - 구현 (이클립스 웹 프로젝트 생성) file 2017.09.12 13481
57 JSP 게시판 만들기 - 개발표준, 화면설계 file 2017.09.12 6656
56 JSP 게시판 만들기 - 시스템 아키텍처 file 2017.09.12 4827
55 JSP (Java Server Page), Servlet에 대해 file 2017.09.12 6759
54 JSP 게시판 만들기 - 네이밍, 데이터베이스 설계 file 2017.09.12 5030
53 JSP 게시판 만들기 - 구현 (웹 프로젝트와 톰켓 연동, 샘플 페이지 작성) file 2017.09.12 5231
52 JSP 게시판 만들기 - 구현 (디렉토리, 파일, 테이블 생성) file 2017.09.12 7966
51 JSP 게시판 만들기 - 구현 (HTML 코딩) file 2017.09.12 17133
50 JSP 게시판 만들기 - 구현 (MySQL과의 연동) file 2017.09.12 37937
» JSP 게시판 만들기 - 구현 (Method, Query 기초) file 2017.09.12 30692
48 JSP 게시판 만들기 - 구현 (파라미터, 요청/응답) file 2017.09.12 4847
47 JSP 게시판 만들기 - 구현 (마무리, 테스트) file 2017.09.12 6632
46 JSP 게시판 만들기 - 완료 (소스파일, 의견) 2017.09.12 5558
Board Pagination Prev 1 2 3 4 Next
/ 4

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved