<JDBC> 3. Example_(2)_ECLIPSE에서 JDBC 활용하는 방법
1. 데이터 베이스 연결하기
-Class.forName()메서드를 이용해서 드라이브를 등록한다.
->oracle.jdbc.driver.OracleDriver ->ojdbc.jar에 있는 내용
-ojdbc.jar파일을 프로젝트에 라이브러리로 추가를 해줘야한다!
-Class.forName()메서드의 경우에는 ClassNotFoundException을 처리해야한다.
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null; 이곳에 선언된 변수 3개의 경우 추후 설명되오니, 우선 작성한다.
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2. Connection 객체 생성하기
DB연결 정보를 가지고 있는 객체
-DriverManager 클래스의 getConnection() static 메서드를 이용
-매개변수 1 : DB접속 주소, 정보 -> 형식이 정해져 있음 -> jdbc:oracle:thin:@ip주소:포트번호:sid
-매개변수 2 : DB접속 사용자 계정명 / 대,소문자 구분하지 않는다
-매개변수 3 : 사용자 계정의 비밀번호 / 대,소문자를 구분한다
-3개의 매개변수 모두 String으로 대입!
-서버 DB를 이용하는 경우 -> jdbc:oracle:thin:@rclass:iptime.org:1521:xe
-예제에서 사용된 DB접속 사용자 계정명과 비밀번호는 student / student 이다.
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
3. Connection 객체를 이용해서 sql문을 실행할 객체를 생성하기
Statement 인터페이스
-Connection의 createStatement()메서드를 이용해서 생성함
-Statement는 connect에 연결되어 있는 DB에 SQL구문을 실행하고, 그 결과를 가져오는 역할
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
4. DB에서 실행할 SQL구문을 작성
String으로 작성!
-쿼리문 작성시 모든것을 동일하게 작성 해야한다. 단, 마지막 세미콜론은 생략한다!
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
5. Statement객체의 executeQuery()메서드를 이용해서 작성된 sql 구문을 실행
-executeQuery(sql구문을 대입);
-executeQuery()메서드를 실행하면 ResultSet를 반환한다. ->DB실행경과(data)가 저장되어 있기 때문에 ResultSet변수로 받아줘야 합니다.
-select문 실행은 executeQuery() 실행->ResultSet
-DML(insert, update, delete) executeUpdate()실행 ->int형 반환
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
//반환값을 resultSet에 담는다
rs = stmt.executeQuery(sql);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
6. ResultSet으로 받아온 data확인, 클래스에 저장하기
-ResultSet의 getOO(컬렴명||index번호)메서드를 이용
-자료형별로 메서드가 만들어져 있음
-문자열(varchar2, nvarchar2, nchar) : getString();
-숫자(number) : getInt()또는 getDouble();
-날짜(Date) : getDate() - java.sql.Date;로 반환
-resultSet에서의 데이터는 각 row별로 데이터를 받아옴
-resultSet의 next()메서드를 이용하면 row에 차례대로 접근할 수 있다. -next() 진위형을 반환
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
//반환값을 resultSet에 담는다
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.print(rs.getString("member_id"));
System.out.print(rs.getString("member_pwd"));
System.out.print(rs.getString("member_name"));
System.out.print(rs.getString("gender"));
System.out.print(rs.getInt("age"));
System.out.print(rs.getString("email"));
System.out.print(rs.getString("phone"));
System.out.print(rs.getString("address"));
System.out.print(rs.getString("hobby"));
System.out.print(rs.getDate("enroll_date"));
System.out.println();
SELECT문으로 가져온 데이터는 통상 VO클래스를 만들어서 저장 후 객체로 활용
수의 객체가 생성된 경우(resultSet에 다수 row가 있는 경우)에는 ArrayList를 이용함
이 부분에 있어서는, 추후 예제부분에서 정리하도록 하겠습니다.
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
위 while문의 구문으로 다음과 같이 데이터를 출력할 수 있다.
하지만, 일반적으로 이렇게 데이터를 단순히 출력하는 것이 아닌 DB에서 가져온 데이터를 타 클래스로 옮기는 경우가 많으니 이 부분은 실전예제를 통해 다루겠습니다.
7. 생성된 객체를 닫아주기
-connection, statement, result(select문을 실행한 경우)
-객체를 반환할때는 생성순서의 역순으로 진행
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
//반환값을 resultSet에 담는다
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.print(rs.getString("member_id"));
System.out.print(rs.getString("member_pwd"));
System.out.print(rs.getString("member_name"));
System.out.print(rs.getString("gender"));
System.out.print(rs.getInt("age"));
System.out.print(rs.getString("email"));
System.out.print(rs.getString("phone"));
System.out.print(rs.getString("address"));
System.out.print(rs.getString("hobby"));
System.out.print(rs.getDate("enroll_date"));
System.out.println();
SELECT문으로 가져온 데이터는 통상 VO클래스를 만들어서 저장 후 객체로 활용
수의 객체가 생성된 경우(resultSet에 다수 row가 있는 경우)에는 ArrayList를 이용함
이 부분에 있어서는, 추후 예제부분에서 정리하도록 하겠습니다.
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
//DB연결 객체는 try문 밖에서 선언을 해줘야한다.
try {
if(rs!=null && !rs.isClosed())rs.close();
if(stmt!=null && !stmt.isClosed())stmt.close();
if(conn!=null && !conn.isClosed())conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
이 부분에서 확인해야 할 사항이 있습니다. 처음에 conn, stmt, rs 변수를 첫 try문 시작전에 선언하였었는데 이는 finally 내부의 try문에서 사용하기 위해서입니다.
만일 try문 내부에서 변수를 선언하였다면 이는 try문 밖으로 벗어나면 사용할 수 없게됩니다. 또한, finally 구문으로 처리해야하는 이유는 첫 try문의 마지막 부분에서
객체를 닫는 과정을 처리하게된다면 이전에 오류가 발생하여 바로 catch문으로 이동하게되면 정상적으로 처리가 되지 않기 때문에 마지막으로 무조건 실행되게 하는 finally 구문으로 처리하게 되는 것입니다.
Author And Source
이 문제에 관하여(<JDBC> 3. Example_(2)_ECLIPSE에서 JDBC 활용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yim5849/JDBC-3.-Example2ECLIPSE에서-JDBC-활용하는-방법저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)