개인 공부/TIL

TIL #220516 #JSP

kaleb 2022. 5. 16. 23:50
728x90

퇼이 순식간에 지나버리고 다시 평일이 왔습니다.

주말에 피로로인해 녹아 있었던 몸을 다시 잘 굳혀서 학원으로 가서 오전 JSP 오후 직업기초 시간이라 조금씩 몸을 회복하려고 하였으나 시간표가 긴급변경되어 오전오후 JSP를 했다는....

게을리 살았던 저를 반성하고 다시 한번 열심히 TIL을 하겠읍니다...


오전, 오후JSP

 

우선 주말이 끼어 있었기 때문에 지난시간에 대한 복습과 연습을 간단하게 진행한뒤에 본격적인 JDBC 대탐험을 진행하였습니다.

 

Driver선언에서 Driver Class가 있는 패키지의 위치에 대해서 한번 살펴 보았습니다.

Project → Referenced Libraries → mysql-connector-java-8.0.29.jar → com.mysql.cj.jdbc(package) → Driver(class)

 

URL선언을 통해서 사용하고자 하는 DB의 위치와 이클립스를 연동합니다.

mysql의 경우 다음과 같은 경로로 구성

“jdbc:mysql://localhost:3306/study_jsp2”

프로토콜 /호스트 IP와 포트번호/ 사용하고자 하는 데이터베이스

 

for each 문의 구조

for(type var : iterate) {
	body-of-loop
}

iterate는 루프를 돌릴 객체로 iterate 객체에서 한개씩 순차적으로 var에 대입되어 for문이 수행됩니다.

iterate는 배열 형태의 자료형만 가능하고 body-of-loop는 수행문입니다.

 

갑작스레 for문이 사용될 일이 있었고 강사님은for each문으로 사용하셨는데 

제 것으로 만들지 못한것 같아서 개인적으로 조사를 했습니다!

 

널스트링

“” (null string) ≠ null

널과 널스트링은 다름


개념정리

 

JDBC : 자바와 DBMS를 연결시켜주는 API(응용프로그램인터페이스)

JDBC 프로그램의 작성단계

저희 강의에서는 기존의 방식과는 조금 다르게 진행합니다

1단계(드라이버 로드) → 2단계(DB연결)→ 3단계(SQL문 작성 및 전달) → 4단계(SQL문 실행) 순

 

Statement :

실제 데이터베이스 SQL문을 보내기 위해 필요한 객체 DML문(삽입, 수정, 삭제, 검색)을 사용할 때에는 이 인터페이스를 사용합니다.

  1. executeUpdate(String sql) : 삽입, 수정, 삭제(INSERT, UPDATE, DELETE)와 관련된 SQL문 실행 이 메소드는 삽입, 수정, 삭제와 관련된 SQL문실행에 사용되며 수정된 레코드의 수를 반환합니다.
  2. executeQuery(String sql) : 조회(SELECT)문을 실행할 때 사용 이 메소드는 Resultset 객체를 반환한다.
    Resultset 객체 : Select문을 이용하여 테이블로부터 얻어온 데이터를 담고 있는 객체
  3. close() : 필수적으로 사용되어야 하는 메서드, 이 메서드는 Statement 객체를 모두 사용한 후 메모리에 변환하기 위해 사용된다. 객체를 사용하지 않을 때 반환해주면 메모리 낭비가 되는 것을 막을 수 있습니다.

PreparedStatement :

Statment의 인터페이스를 상속받기 때문에 하는 일은 그와 비슷합니다.

값 매핑 기능을 사용해서 Statement 인터페이스보다 편리하게 SQL문을 전송할 수 있습니다.

이건 아래의 예시를 보면 더 이해가 잘됩니다!

PreparedStatement를 사용하면 반복되는 SQL문을 쉽게구현할 수 있는데 이때 “?”라는 바인딩 변수가 포함된다.

이 변수(?)는 함수의 인수와 같은 역할을 한다합니다!

SQL문에서 여러 조건절을 사용하여 여러 인수들을 지정할 수 있는데 그때 마다 set()메서드를 사용하면되는데

set()메서드는 넘겨주는 인자 값의 타입에 따라 이름이 변합니다.

예를 들어 해당 바인딩 변수 ? 가 String 타입일 경우 setString()

<%
//1단계 드라이버로드

String driver = "com.mysql.cj.jdbc.Driver";
Class.forName(driver);
// package는 항상 주소의 역순 (com.mysql) 이후 원래 방향대로 주소의 하위 폴더를 표현함!

/*2단계 DB와 연결
연결은 Connection!!!
*/
Connection con = DriverMaster.getConnection(url, user, passwd);

//3단계 구문 작성 및 전달
//ex) String name, id가 선언되었다고 가정
String sql = "INSERT INT test8_2 VALUES(?,?);
// 만능문자 ?

PreparedStatement pstmt = con.prepareStatement(sql);
//자동완성을 이용해서 자동으로 import되게 하는것이 좋다
pstmt.setString(1, name)
pstmt.setString(2, id)
/*preparedstatement의 set()메소드는 넘겨주는 인자 값의 타입에 
*따라 이름이 바뀐다.  즉 넘겨주는 인자 값이 String인경 setString()
메소드를 사용하여 매핑될 값을 넘겨준다.
*/
//4단계
//최종적으로 구문을 실행
int insertCount = pstmt.executeUpdate();
//sql의 값이 있기 때문에 메소드의 인자값이 없는 것으로 자동완성한다!
%>

 

ResultSet :

SELECT문을 사용해서얻은 레코드 값들을 테이블의 형태로 갖게 되는 객체입니다.

while(rs.next()) {} : rs.next() 가 true일때 반복하는 while문
if(rs.next()) {} : rs.next() 가 true일 때 수행하는 if문
  1. next() : 커서를 다음 행으로 이동시키는 메서드 (bloean type을 반환)
  2. getXXX() 메서드 : ResultSet 객체는 SELECT문으로 가져온 레코드를 테이블 형태로 가지고 있으며, 그 레코드에 있는 특정 컬럼의 값을 가져오기 위해서는 getXXX() 메서드를 사용합니다.
    이전의 setXXX()메서드와 동일하게 넘겨주는 인자 값의 타입에 따라 이름이 바뀌는데  getXXX()메서드는 인자를 두가지 방법으로 전달 할 수 있습니다.
  • getXXX(int Columnindex) : 인덱스값을 통해서 반복문으로 활용가능하고 코드가 간결해짐
  • getXXX(String ColumnName) : 전달인자가 컬럼명으로 되어 있어 직관적임

 

// 전달받은 이름(name)과 아이디(id)값이 있다고 가정
<%
String driver = "com.mysql.cj.jdbc.Driver";
//driver 패키치가 있는 곳의 위치
String url = "jdbc:mysql://localhost:3306/study_jsp2";
//연결해야할 DB의 위치
String user = "root";
String password = "1234";

// 1단계 드라이버 로드
Class.forName(driver);

//2단계 DB연결
Connection con = DriverManger.getConnection(url, user, password);

//3단계 SQL 구문 작성 및 전달
String sql = "SELECT * FROM test8_2";
PreparedStatement pstmt = con.prepareStatement(sql);
%>
<table border ="1">
<tr>
<th>이름</th><th>아이디</th>
</tr>
<%
ResultSet rs = pstmt.excuteQuery()
	while(rs.next() { //next()의 값이 거짓이 될 때 까지 진행하는 반복문
%>
<tr>
<td><%=rs.getString("name")%></td>
<td><%=rs.getString("id")%></td>
</tr>
<%
}
rs.close(); //close는 생성의 역순으로 진행
pstmt.close();
con.close();
%>
</table>

 

오늘은 앞전에 사용했던 회원가입창들을 이용해서 실제 값을 입력하고 이를 DB로 전달받아 SELECT문으로 출력하는 것 까지 해보았는데 파도처럼 지나갔던 하루였던 것 같습니다. ㅜㅜ

코드공유와 파일첨부등을 배우고나서 기회가 된다면 블로깅 이전에 작성했던 코드들도 git-hub에 올려보도록 하겠습니다~!

!썸네일은 제가 직접 만들고 있긴 한데 관련 내용도 조만간 올리도록하겠습니다.(숨을 쉴수 있다면)

응 내일 오전 또 JSP....

반응형

'개인 공부 > TIL' 카테고리의 다른 글

TIL #220518 #JAVA #NET  (0) 2022.05.18
TIL #220517 #JSP #JAVA  (0) 2022.05.17
TIL #220513 #JSP  (0) 2022.05.13
TIL #220512 #DB #WEB  (0) 2022.05.12
TIL #220511 #JSP #JAVA  (2) 2022.05.11