728x90
반응형
코딩 절차 및 사용 예시
//필드선언
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe"; //db서버의 컴퓨터 주소 //jdbc:oracle:thin:드라이버 타입
String username = "testSQL"; //접속할 sql데이터의 사용자 이름
String password = "test"; //비밀번호
1. DriverManager에 해당 DBMS Driver 등록
2. 해당 Driver로부터 Connection instance 획득
3. Connection instance로부터 Statement instance 획득
4. Statement method를 이용하여 SQL문 실행
5. 실행 후 결과를 ResultSet(Select) 혹은 int형 변수(DML)로 받아서 처리
6. 사용한 자원 반납
DML인 경우 예시
public int insertMenu(Member m) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = "insert into member values(?,?,?,?,?,?,?,?,?,default)"; //세미콜론은 사용하지 말것
try {
//1. driver 클래스 등록 : ClassNotFoundException(발생시 오타나 jre에 ojdbc6가 잘 등록 되었는지 확인해보기)
Class.forName("oracle.jdbc.OracleDriver"); //오타있으면 예외처리됨
//2. Connection 객체 생성 : oracle db server url, username, password
conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false); //트랜잭션 처리를 위해 반드시 쓰기
//기본값 true, DML요청시 자동커밋 설정
//commit메소드 호출이 없어도, 연결해제시 자동 커밋됨(t/f상관없이)
//3. Statement 객체 생성 : PreparedStatement
//미완성 sql문 전달
pstmt = conn.prepareStatement(sql);
//String sql = "insert into member values(?,?,?,?,?,?,?,?,default)"의 물음표 채우는 작업
pstmt.setString(1, m.getMemberId());
pstmt.setString(2, m.getPassword());
pstmt.setString(3, m.getMemberName());
pstmt.setString(4, m.getGender());
pstmt.setInt(5, m.getAge());
pstmt.setString(6, m.getEmail());
pstmt.setString(7, m.getPhone());
pstmt.setString(8, m.getAddress());
pstmt.setString(9, m.getHobby());
//4. 쿼리 실행 : 결과값 받기
//DML인 경우 executeUpdate() : int
//DQL인 경우 executeQuery() : ResultSet
result = pstmt.executeUpdate();
//5. 트랜잭션 처리 : commit/rollback
if(result > 0) conn.commit(); //pstmt.commit아님
else conn.rollback();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}finally {
//6. 자원반납 (빼먹으면 사용할 메모리 없어서 뻑날수 있음)
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
DDL인 경우 예시
public Member selectOneMember(String memberId) {
Member m = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rset = null;
String sql = "select * from member where member_id = ?"; //잘 작동하는지 sql dev에서 확인하면 좋음
try {
//jdbc사용법
//1. driver클래스 등록
Class.forName("oracle.jdbc.OracleDriver");
//2. Connection 객체 생성
conn = DriverManager.getConnection(url, username, password);
//3. PreparedStatement 객체 생성 : 미완성쿼리 값대입
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memberId);
//4. 쿼리실행
rset = pstmt.executeQuery();
//5. ResultSet -> Member
if(rset.next()) { //1아니면 0이니까 while이나 if둘다 쓸 수 있음
memberId = rset.getString("member_id"); //위에 선언한게 있음
String password = rset.getString("password");
String memberName = rset.getString("member_name");
String gender = rset.getString("gender");
int age = rset.getInt("age");
String email = rset.getString("email");
String phone = rset.getString("phone");
String address = rset.getString("address");
String hobby = rset.getString("hobby");
Date enrollDate = rset.getDate("enroll_date");
//한행의 정보 -> 멤버객체로 담아줌
m = new Member(memberId, password, memberName, gender,
age, email, phone, address, hobby, enrollDate);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
//6. 자원반납 - 생성했던 역순으로
try {
rset.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return m;
반응형
'프로그래밍 > JDBC' 카테고리의 다른 글
[JDBC] Could not get JDBC Connection; nested exception is java.sql.SQLTransientConnectionException (0) | 2022.02.16 |
---|---|
09.01(JDBC) (0) | 2020.09.01 |
06.02(JDBC coding 절차 및 용어 설명) (0) | 2020.06.02 |
06.01(이클립스와 JDBC연동 - ojdbc6.jar 파일) (0) | 2020.06.01 |