IT수업/JAVA PART2

IT 수업 13주차 (54) JDBC 연결하기

워제하 2024. 3. 21. 12:43

 

● JDBC

Java DataBase Connectivity의 약어로 Java와 DB 연결을 위한 표준 API이다.

Java에서 DB를 연결하고, 그 안에 있는 데이터를 가져오기 위해서 사용한다.

 

 

 

 

● 주요클래스 및 인터페이스

- DriverManager : JDBC 드라이버 로드

- Connection : DB와 연결하기 위한 위한 인터페이스

- Statement / PreparedStatement / CallableStatement : SQL을 보내기 위한 통로

      - Statement : SQL을 보내기 위한 통로로 인자가 없다.

      - PreparedStatement : Statement와 동일한데 차이점은 인자값으로 SQL을 받기 때문에 특정한 SQL에 대한 통로라고 생각하면 된다.

      - CallableStatement : PL/SQL을 호출할 때 사용

- ResultSet : SQL문의 결과를 저장하는 객체

 

 

 

 

 

 

 

mysql community downloads에 들어가서 다운로드를 해준다.

 

 

 

작업할 패키지에 파일을 넣고 

위치를 복사해 JAVA_BOOK에 마우스 우클릭해 properties의 java build path의 libraries의 classpath의 add external jars로 넣어준다. 

 

 

 

 

그리고 mysql에들어가 데이터 베이스인 testdb를  만들어 준다.

 

기존에 만들어진 코드의 try에 추가해준다.

url은 " jdbc:사용하려는 db명://접속하려는 위치/db명 " 으로 적어주면 된다.

mysql의 localhost는 3306으로 잡혀있어서 3306으로 적어주면 된다.

 

< 실행화면 >

 

 

그리고 conn의 자원을 제거해준다.

 

파일을 열고 닫을 때나 DB커넥션을 열고 닫을 때는 명시적으로 close를 해서 자원을 반환해야한다.

자원해제는 finally 블록에서 해제해야한다. 이유는 try 블록에서 Exception이 발생할 수 있기 때문에 마지막에서 해제시켜주는 것이다. 

finally는 무조건 실행되므로 마지막에서 전부 자원이 해제된다.

 

 

자원을 해제하는 이유는 프로그램에서 사용한 자원을 해제하지 않아 독점하게 되면 운영체제의 자원이 고갈되어 다른 프로그램이 자월을 사용하지 못하게 되는 결과를 초래하기 때문에 해제한다.

 

Scanner, BufferedReader, FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream, 등 이런 자원들을 사용한 객체들은 자원을 해제해야만 한다.

 

 

 

- INSERT 작업

 

mysql에서 테이블을 만들고 시작한다.

테이블 이름은 tbl_std로 했다.

 

 

 

< 실행화면 >

 

 

 

 

 

- 원격접속 하기

 

해당 ip주소를 사용하는 컴퓨터에 원격접속이 가능하다.

이때 id은 중복이 생기면 안되므로 모두 다르게 해줘야한다.

 

 

 

 

 

- UPDATE

 

기존코드에서 try의 insert를 update 해준다.

 

< 실행화면 >

 

 

 

 

 

 

- DELETE

 

< 실행화면 >

 

 

 

 

 

 

- SELECT

select를 하기위해 대용량 데이터를 가진 엑셀파일을 활용할 것이다.

대용량 엑셀 파일을 가져오는데 확장명을 .csv로 바꿔서 가져와야한다.

 

현재 폴더로 가져온다.

 

그리고 mysql에 import해준다. import 할때 new create table로 해주면 된다.

 

 

테이블명을 tbl_data로 바꿔줬다.

 

 

 

그리고 ResultSet과 연결해준다.

 

엑셀파일의 인덱스가 1부터 시작하므로 1번, 2번, 3번 인덱스를 가져오는 것을 볼 수 있다.

(1번 인덱스는 번호, 2번 인덱스는 시도명, 3번 인덱스는 시군구명)

 

< 실행화면 >

 

 

 

 

 

 

 

그리고 인덱스번호가 아닌 열이름으로도 가져올 수 있다.

rs.getString(4)로 4번인덱스를 가져오는 것이 아닌 rs.getString("관리구역명"+" "); 로 열이름을 적었다.