Java
Java (9) - JDBC를 이용하여 Java와 DB연동하기
leehii
2022. 6. 10. 08:49
====================DB와 연동하기====================
1. DB 연동을 위해 환경설정 작업하기
Data Source Explorer >> Database Connections 에서 New를 누른후
자신이 사용하는 DB를 선택한다
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib 로 들어가서 oracle6버젼으로 연결함
Service 네임을 db에서 xe로, host를 Server에서 localhost로 바꿔줌
-->> 나중에 다른 oracle 서버의 url을 받을경우 host부분에 해당 url을 넣어주면 됨!!!
이후 해당 프로젝트에 마우스 오른쪽으로
BUild path 를 누르고
libraries 에서 add external JARs 를 선택,
C:/oraclexe/app/oracle/product/11.2.0/server/jdbc/lib/ojdbc6.jar 선택-apply
이후 jsp에서 확인가능한 sql파일을 생성해줌!
====================================== JDBC 사용하기 ========================================
□ JDBC ○ JBBC의 순서
가장 먼저 프로젝트에 오라클과의 연결을 위해 ojdbc.jar파일을 연결해주고 진행해야함
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib에서 해당파일을 연결하기
a. 드라이버 로딩 ---- b. DB 연결 ㅣ -->> try 한개 안에 다 들어가야 함 (1~3) // try는 오류가 났을때
ㅣ 어디에서 런타임오류가 났는지 확인을 위해 있는 기능! c. SQL 문장 전송 ---- d. 연결해제 -------->> finally 안에 들어가야 함 (4) ○ 만드는 방법 (insert, update, delete의 경우 방법이 동일람 // select는 6번부터 조금 다름) 0. 아래에서 try문 위로 빼준 전역변수 지정 (객체의 초기화 값 = null)
-- (ex) Connection conn = null; PreparedStatement psmt = null; 1. 연결통로 생성 (동적로딩) -->> !!!밀입국할 배 구하기!!! Class.forName("연결할 드라이버"); -- 어떤 데이터베이스의 드라이버를 가지고올껀지 정해주는 코드 -- 자바와의 연결통로 생성하는 작업
-- (ex) Class.forName("oracle.jdbc.driver.OracleDriver"); 2. DB 접속에 필요한 데이터 작성 (접속할 DB의 주소, 내 아이디, 내 비번 등등) -->> !!!밀입국할때 사용할 신분증등 준비하기!!! 데이터타입 변수명 = 데이터;
-- (eX) String url = "jdbc:oracle:thin:@localhost:1521:xe"; String user = "hr"; // DB계정 String password = "hr"; //DB비번
jdbc:oracle:thin -->> 드라이버 // @localhost -->> ip주소 // 1521 -->> 포트번호 // xe -->> DB이름 3. 연결을 위한 준비하기 -->> !!!밀입국할 사람 구하기!!!
Connection conn = DriverManager.getConnection (2번에서 적은 데이터들 입력);
---->> conn = DriverManager.getConnection(url, user, password); 4. SQL문 준비 (연결해서 이제 뭘 할껀지 적어주는 부분) -->> !!!conn 심부름꾼이 밀입국해서 뭘 할지 알려주기!!! 데이터타입 변수명 = "";
-- (eX) String sql = "update mem set mem_pw = ?, mem_name=? where mem_id=?"; String sql = "insert into mem values (?, ?, ?)";
입력할 정보를 아직 알 수 없으니 일단 ?로 표시하고 나중에 적어주기 5. SQL문 전송하기 = DB로 전송하기 위한 SQL문 담기 (SQL문과 ?를 채워서 보내주기) -->> !!! psmt라는 가방에 필요한 정보를 담아서 밀입국 시작!!!
PreparedStatement 변수명 = 커넥션 변수명.prepareStatement(SQL변수명); psmt.setString(번호, 실제 데이터); --> 어떤걸 어떻게 연결하겠습니다라는 내용.
★ sql문에 ?가 있으면 사용해야함, 즉 4번의 ? 인자를 채워줘서 보내줘야 함 ( 입력받은 데이터 채워주기)★ ============================================================================= PreparedStatement는 나중에 제일 위로 빼고 지정한 변수명(psmt)만 사용할꺼임!
-- (eX) PreparedStatement psmt = conn.prepareStatement(sql); 이게 원래 방식이고
이걸 전역변수로 PreparedStatement psmt = null; 로 위에서 선언해두고
여기서는 psmt = conn.prepareStatement(sql);이렇게 쓸꺼임
setString에는 ?인자가 있으면 채워서 보내줌
--> psmt.setString(1, id); // psmt.setString(2, pw); // psmt.setString(3, name); 6. SQL 문장 실행하여 전송여부 확인하기 --->>> !!! 밀입국 성공했는지 확인해보기 !!! -- 변수를 지정해서 조건문으로 변수값이 돌아가면 성공, 안되면 실패 int row = psmt.executeUpdate(); -->> executeUpdate는 DB의 " ; " 와 같은 뜻
실행하겠다는명령어, 즉 잘 담아왔는지 확인하는 것! if (row > 0) { System.out.println("데이터 추가 성공!"); } else { System.out.println("데이터 추가 실패!"); } 7. 연결통로 닫아주기 (try문 밖에서) finally { --->> DB에 정보를 담아간 가방인 psmt와 연결된 통로를 왔다갔다 하는 커넥션 변수명인 conn을 닫기! if (psmt != null) psmt.close(); if (conn != null) conn.close(); } 닫아주고 오류를 ctrl 1로 try, catch문을 하나 만들어 둘다 그곳에 넣어준다. ===========================================================================================================================
○ 만드는 방법2 (select등과 같이 테이블의 원본값이 변하지 않는 경우 사용) ★★★★★ 아래에서 try문 위로 빼준 전역변수 지정 (객체의 초기화 값 = null) ★★★★★ -- (ex)
전역변수 선언
Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; -->> 요게 추가됨!!!
이후
Class.forName("oracle.jdbc.driver.OracleDriver"); -->> try catch문에 담아주고
★★★★★ 1. 사용자로부터 내용을 확인하고 싶은 id값 입력받기 --> sql 연결시 입력받은 id에 대한 모든 정보 (id, pw, name) 출력하기 ★★★★★ 2. DB 접속에 필요한 데이터 작성 String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "hr";
3. 연결을 위한 준비하기 conn = DriverManager.getConnection(url, user, password);
4. SQL문 준비 String sql = "selext * from mem where mem_pw='1111'";
여기서 눈여겨볼 부분은 ?인자가 없음!!!
5. SQL문 전송하기
psmt = conn.prepareStatement(sql);
★★★? 값이 없으면 set을 사용하지 않음. set은 내용이 변하기 때문!!! psmt.setString(번호, 실제 데이터);는 sql문에 ?가 있으면 사용해야함!!!★★★ ★★★★★ 6. select절에서 SQL 문장 실행하여 전송여부 확인하기 --->>> !!! 밀입국 성공했는지 확인해보기 !!! ★★★★★ -- select에서는 sql을 실행하여 전송여부를 확인할때의 형태가 조금 다름!!!!! insert, updatge, delete같이 값이 수정되는 것들은 "executeUpdate();"를 사용했지만 select처럼 원본값이 변하지 않는 것들은 "executeQuery();"를 사용한다!!! ★★★★★ -- 이때는 변수 또한 숫자 변수인 int 가 아닌 ResultSet rs 라는 변수명을 써준다 (ResultSet 는 마찬가지로 try위로 올려줄것임)
7. 연결통로 닫아주기 ○ 주의사항 -- import 해야할 값들 확인할때 자동완성으로 뒤에 java.sql이 붙는지 꼭 확인해보기
=======================mvc 모델로 변환==========================
위의 형태를 mvc모델로 사용하고 싶다면
먼저 Main이 아닌 부분에 공통된 작업들을 메소드로 작성해서 Main에선 호출만 하는 식으로 이용한다
예를 들어
DB와 연동하는 부분인 class.forName(),
DB와 연결할 String url, id와 pw (hr/hr) 등을 getCon메소드로 만들어주고
연결을 해제하는 부분을 (result rs 변수든, int row변수든, conn변수든, psmt변수든)을 close라는 메소드로 만들어주면
아래에서 insert를 위한 메소드나, update 등등 추가적으로 만들어줄 메소드들에도
첫부분에 getCon, 마지막에 close를 호출해주면 메소드 작성이 쉬워짐
이후 테이블에 값을 넣어주는 내용을 insert라는 메소드로 만들어주든
회원정보를 업데이트하는 내용을 update라는 메소드로 만들어주든
사용할 메소드들을 JDBC 만들때처럼 만들어준후
Main 클래스에서는 해당 메소드들을 호출해서 코드작성을 줄인다