작은 지식주머니
DataBase 20211020 수업 본문
Vscode 외부 Jar 불러오는법.
수업은 오라클db로 진행됨.
or 환경 변수 설정으로 들어가 class path에 경로설정.
JDBC Programming
- JDBC Driver 로딩.
- DB 서버 접속하기
- Statment / PreparedStatement 객체 생성하기
- SQL문 실행
- 자원해제
순으로 이루어짐
우선 JDBC Driver 로딩과 DB 서버 접속을 해야하는데.
DBUtill 이라는 Class 생성 후
import java.sql.*;
public class DBUtil {
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
Connection getConnection() 이라는 개체를 만들고
Connection conn 값 설정 → null값 지정
Class.forName(" oracle.jdbc.driver.OracleDriver "); OracleDriver의 위치를 집어넣어줌.
conn DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",(아이디),(비밀번호)); 입력으로 접속
conn을 반환하는 메서드를 작성했음.
또한 집어넣을 테이블이 필요하므로
MemberVO 라는 클래스 생성.
id , passwd, name, mail 값 을 넣어준 후 기본생성자 생성 → 메인 생성자 생성 → getter,setter 설정 → toString 설정
public class MemberVO {
private String id;
private String passwd;
private String name;
private String mail;
public MemberVO() {
}
public MemberVO(String id, String passwd, String name, String mail) {
super();
this.id = id;
this.passwd = passwd;
this.name = name;
this.mail = mail;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
@Override
public String toString() {
return id + "/" + passwd + "/" + name + "/" + mail;
}
}
MemberVO를 입혀줄 MemberDAO 클래스를 생성.
close에 대한 메서드는 좀 더 밑에 설명되어있음.
import java.sql.*;
//Member 테이블 처리 객체
public class MemberDAO {
//회원 추가
public void memberInsert(MemberVO vo) {
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = null;
try {
String sql = "insert into member values(?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getId());
pstmt.setString(2, vo.getPasswd());
pstmt.setString(3, vo.getName());
pstmt.setString(4, vo.getMail());
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, pstmt);
}
}
MemberInsert 메서드에 방금 만든 MemberVO 값을 넣어주고
Connection conn 생성 → DButil 에서 만든 서버접속용 getConnection(); 메소드를 가져옴.
그 후 PreparedStatement pstmt = null 값 설정 후
SQL 명령문 String sql = "insert into member(테이블) values(?,?,?,?)"; 의 (?) = 임의의 값을 세팅
?의 값을 넣어줘야 하므로
pstmt.setString으로 MemberVO의 개체들을 전부 가져옴.
pstmt.executeUpdate로 sql 업데이트
이제 SQL문의 실행을 위해서 Main class를 생성
import java.sql.*;
//Member 테이블의 데이터 처리 객체
public class test2 {
public static void main(String[] args) {
MemberDAO dao = new MemberDAO();
//회원 추가
for (int i = 2; i < 10; i++) {
MemberVO vo = new MemberVO("user0" + i, "1111", "Amy", "user01@gmail.com");
dao.memberInsert(vo);
}
}
}
MemberDAO를 불러온 후
MemberVO에 값을 지정.
meberinsert 메서드를 실행 해야하지만 지금까지 자원해제를 하지 않았으므로 다시 DButil로 돌아감.
//자원 해제
public static void close(Connection conn, PreparedStatement pstmt) {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
DButil 클래스에 추가.
자원해제는 마지막으로 썼던 pstmt , conn 순으로
pstmt값이 null이 아닌경우엔 close를 한다.
이유는 sql문에서 오류가 발생한다면 null 값 그대로 이식이 되는데 NullPointException이 발생하기 때문이다.
이제 main 메서드에서 실행하면
잘 생성된 모습
이제 sql실행을 자바 내에서 하기 위해서는 일단 방금 마지막으로 했던 DButil close 메서드를 한개 더 만든다.
public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
ResultSet rs 라는 구문이 추가되어있다.
자원해제는 마지막으로 썼던 rs, pstmt , conn 순으로 닫는다.
다시 MemberDAO 클래스로 돌아가서.
public MemberVO getMember(String id){
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
MemberVO vo = null;
try {
pstmt = conn.prepareStatement("select * from member where id=?");
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if (rs.next()) {
vo = new MemberVO();
vo.setId(rs.getString("id"));
vo.setPasswd(rs.getString(2));
vo.setName(rs.getString(3));
vo.setMail(rs.getString(4));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return vo;
}
getMember 라는 메서드를 사용한다 String id를 기준으로 값을 찾아내도록 설정하고
conn, pstmt, rs, vo 값을 전부 불러와주고 나서
pstmt 값에 SQL명령문 설정 ? = 임의의 값
pstmt.setString(1,id); = id 값을 기준으로 검색
rs= pstmt.executeQuery(); = ResultSet의 객체를 반환함.
그 후 VO 값을 가져와서 전부 입혀줌.
마지막으로 VO; 값을 반환시켜주게 하면 끝.
Main class로 돌아가
MemberVO r = dao.getMember("user01");
if (r != null) {
System.out.println(r);
} else {
System.out.println("존재하지않는id");
}
dao.getMember("user01");
"user01" 에 대한 정보가 있다면 모든 정보를 뱉어내고 아니라면
존재하지 않는다고 getMember(String id) 값을 실행
'DB수업' 카테고리의 다른 글
DataBase 수업 20211019 (0) | 2021.10.19 |
---|---|
DataBase 수업 20211018 (0) | 2021.10.18 |
DataBase 20211017 수업 (0) | 2021.10.17 |
Database 수업 20211014 (2) (0) | 2021.10.14 |
DataBase 수업 20211014 (0) | 2021.10.14 |