본 후기는 뉴렉처 자바 JDBC 강의를 보고 작성하였습니다.
자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API입니다. JDBC는 자바의 표준 에디션에서 지원하는 기술로서, 접속하려는 DBMS 서버에 따라서 JDBC 드라이버가 필요합니다. 출처
개발자가 SQL문을 통해 직접 DB에 접근할 때
사용자가 UI를 통해 간접적으로 DB에 접근 할 때
DB에 따라 SQL문이 달라지는 불편함 등으로 인해 JDBC(Java Data Base Connectivity)를 통해 각 DB 드라이버와 연계되며 이를 통해 편리하게 DB에 접근하도록 할 수 있다.
setup.exe
파일을 실행한다.설치한 서버 프로그램으로 직접 접근은 불가하며 클라이언트 프로그램(sqlplus / sql developer)을 통해 접근 및 명령어(인증/실행/결과확인) 사용이 가능하다.
SQL Plus 는 콘솔 기반 DBMS 접근 도구
우선 Java perspective가 아니라면 아래와 같이 변경을 해주고 해당 아이콘이 보이지 않는다면 Window > Perspective > Open Perspective 메뉴 항목으로 가서 열어 준다.
![image.png](https://images.velog.io/post-images/underlier12/aa3bfc20-3fe5-11ea-a0b5-8d2d58b5ef86/image.png
프로젝트 생성 후 프로젝트 우측 클릭 > Build Path > Configure Build Path 를 선택하면 아래와 같은 창이 뜨며 Add External JARs를 선택해 다운로드 받은 JDBC Driver 파일(ojdbc8.jar)을 추가해준다.
메모리 상에 드라이버를 올리고 연결이 된 후 실행문을 수행하고 그에 따른 결과를 얻는 순서
Oracle SQL Plus로 접속하여 로그인을 한 뒤 위의 명령어들을 통해 테이블들을 생성한다.
실패하고 결국 DBMS 강좌를 먼저 수강하여 SQL Developer로 테이블 생성하였다
'JDBCPrj'라는 프로젝트를 생성한 뒤 아래와 같은 내용으로 Program.java를 작성한다.(NOTICE 테이블의 TITLE 필드 값을 가져와 출력하는 코드)
오라클 드라이버(ojdbc8.jar)를 Library에 필히 추가해야 하며 NOTICE 테이블 내에 데이터 하나 이상을 삽입해 둬야 한다.(ORACLE은 COMMIT 명령을 통해 강제 커밋을 해줘야 한다)
INSERT INTO NOTICE VALUES(1, 'JDBC란 무엇인가?', 'NEWLEC', 'AAA', SYSDATE, 0, '');
COMMIT;
package ex1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Program {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@[ip 주소]:1521/xepdb1";
String sql = "SELECT * FROM NOTICE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "NEWLEC", "****");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
if(rs.next()) {
String title = rs.getString("TITLE");
System.out.println(title);
}
rs.close();
st.close();
con.close();
}
}
url에 중간에 본인 컴퓨터의 ip 주소가, Connection에 비밀번호는 실제 비밀번호가 들어간다.
아래에서 볼 수 있듯 각 필드에 맞는 데이터를 가져오기 위해 알맞는 메소드를 찾아 적용하고 DB 내 모든 데이터가 출력될 수 있도록 작성하라.
package ex1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class Homework {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@59.15.156.101:1521/xepdb1";
String sql = "SELECT * FROM NOTICE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "NEWLEC", "root");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("ID");
String title = rs.getString("TITLE");
String writerId = rs.getString("WRITER_ID");
Date regDate = rs.getDate("REGDATE");
String content = rs.getString("CONTENT");
int hit = rs.getInt("hit");
System.out.printf(" id : %d, title : %s, writerId : %s, "
+ "regDate : %s, content : %s, hit : %d\n",
id, title, writerId, regDate, content, hit);
}
rs.close();
st.close();
con.close();
}
}
위의 내용에서 조회수가 10 이상인 데이터만 출력하라
package ex1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class Homework {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@59.15.156.101:1521/xepdb1";
String sql = "SELECT * FROM NOTICE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "NEWLEC", "root");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("ID");
String title = rs.getString("TITLE");
String writerId = rs.getString("WRITER_ID");
Date regDate = rs.getDate("REGDATE");
String content = rs.getString("CONTENT");
int hit = rs.getInt("hit");
if(hit > 9) {
System.out.printf(" id : %d, title : %s, writerId : %s, "
+ "regDate : %s, content : %s, hit : %d\n",
id, title, writerId, regDate, content, hit);
}
}
rs.close();
st.close();
con.close();
}
}
SQL문을 활용하는 것이 더 바람직하다. 이미 필터링된 데이터만 출력하는 것이 반복문을 돌면서 확인 후 출력하는 것보다 효율적이다.
아래와 같이 java에서 조건문을 이용하는 것보다 SQL문으로 미리 필터링 된 데이터를 가져오는 것이 역할 상 적합하다.
지적하는 것을 정확히 틀렸다. 실수를 다시 반복하지 말자.
자바는 UI 레이아웃과 데이터 전달에만, 데이터 연산/가공처리는 데이터베이스가 담당하도록 설계해야 옳은 역할 분담이 되겠다.
정보 너무 감사합니다^^ 이 사이트는 처음인데 친구추가 기능은 없는 것 같아 아쉽네요 ㅜㅜ!