만족

[JSP] 데이터베이스 연동 본문

[JSP] 데이터베이스 연동

Backend/JSP Satisfaction 2018. 1. 3. 22:01

설명은 Oracle Database 11g Express Edition으로 한다.


.java파일(Servlet)에서 Oracle Database를 이용하는 방법을 알아보자.


doPost()나 doGet()중에서 사용하는 Method를 선택하여 다음의 코드를 삽입한다.


doPost를 기준으로 설명하면


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub


request.setCharacterEncoding("EUC-KR");

//특정 Database와의 연결 정보를 담는 Object

Connection connection= null;

//SQL을 사용하기 위한 Object

Statement statement= null;

//Statement에서 SQL을 실행하고 실행 결과를 저장하는 Object

ResultSet resultSet= null;

String info= null;

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

 // 두 번째 매개값에는 oracleDatabase의 username을 입력한다.

// 만약 따로 계정을 추가하지 않았다면 system을 입력한다(기본 관리자 계정)

// password는 oracleDB설치시에 입력했던 Password를 입력한다.

//이 작업으로 oracleDB를 사용할 수 있게 된다.

connection= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "userName", "password");

//SQL문을 사용하기 위해 객체를 불러온다

statement= connection.createStatement();

//SQL문을 실행하고 결과값을 저장한다.

//executeQuery의 매개값으로 SQL문을 StringType으로 전달한다

//세미콜론(;)은 생략한다

//문자열을 SQL에서 사용할 때 작은따옴표(')로 감싼다는 점에 유의한다.

resultSet= statement.executeQuery("select * from member where id='"+ id+ "'and pw='"+ pw+ "'");

while(resultSet.next()){

    //현재 result위치에서 column이 id인 데이터를 읽어온다

String id= resultSet.getString("id");

System.out.println("id");

}

}catch(Exception e){

System.out.println(e.getMessage());

}finally{

try{

if(connection!= null) connection.close();

if(statement!= null) statement.close();

if(resultSet!= null) resultSet.close();

}catch(Exception e){

System.out.println(e.getMessage());

}

}

}


SQL문을 직접 사용할 수 있다는 장점이 있지만 +로 여러 개의 문자열을 합치고, 또 ' '로 묶어주는 과정에서 오타가 나는 등의 실수가 많이 발생하기도 하고


또는 그 이전에 Connection과정에서 오타가 발생하는 경우가 꽤 빈번하다.


어떤 이유에서 오류가 발생했는지를 알기 쉽게끔 catch부분에서 e.getMessage()를 출력해주는 것이 좋다.


ResultSet의 경우에는 내부 배열을 이용하는데


배치는 


BOF | data1 | data2 | ...... | EOF


처럼 시작은 BOF, 끝은 EOF로 표현한다.


위의 예에서는 while(resultSet.next()){ ... } 의 형식을 취하고 있는데


이는 맨 처음 진입을 시작할 때 next()해줌으로써 BOF에서 다음 데이터로 이동하게 된다.


resultSet.next()는 데이터의 위치가 EOF에 위치하게 되면 false를 반환하므로, EOF에 도달하면 Loop가 끝나게 된다.


데이터베이스의 이용이 끝나면 


if(connection!= null) connection.close();

if(statement!= null) statement.close();

if(resultSet!= null) resultSet.close();


을 이용해 연결을 끊어줌으로써 자원낭비를 막는다.

'Backend > JSP' 카테고리의 다른 글

[JSP] 빈(Bean)  (0) 2018.01.05
[JSP] PreparedStatement  (0) 2018.01.03
[JSP] 포워드(Forward)와 리디렉션(Redirection)  (0) 2018.01.03
[JSP] 쿠키(Cookie)  (0) 2018.01.02
[JSP] 기초 간단정리  (0) 2018.01.02


Comments