개발 일기
DAO(Data Access Object) 사용해서 JDBC 코딩 해보기 1 (feat. 객체 없이 직접 데이터 값 DAO에 넣고 출력) 본문
DAO(Data Access Object) 사용해서 JDBC 코딩 해보기 1 (feat. 객체 없이 직접 데이터 값 DAO에 넣고 출력)
개발 일기 2021. 7. 23. 23:11안녕하세요.
오늘은 JDBC의 핵심??이라 할 수 있는 DAO 객체를 생성하여 SQL의 DML문에 활용하는 코딩을 해보겠씁니다!
DAO(Data Access Object)란??
- 어떠한 데이터(ex. Address)들을 저장하고있는 Address 테이블에 CRUD(Create, Read, Update, Delete)
작업을 할 수 있는 단위(???)메쏘드를 가지고있는 클래스
- AddressService객체의 요청(메쏘드호출)을 받아서 Data Access(DB)에 관련된 단위기능(CRUD)을 수행하는 객체
=> 즉 메인에서 데이터와 관련된 작업(CRUD 등)을 요청하기 위해 준비해놓은 클래스라고 할 수 있다.
DAO 클래스 작성 예시
//전제: 오라클 DB에 Address(주소DB)가 있음
JDBC Flow에 맞추어 SQL DML 관련 메소드 생성
(단, 메소드 내 SQL문에 직접 데이터를 입력하는 방식으로 작성 해봄, 객체 사용 X)
JDBC Flow
(https://soonggi.tistory.com/51)
1. Driver Class Loding
2. Connection 객체 생성(DBServer에 연결)
3. Statement 객체 생성(SQL 전송 객체)
4. SQL문(insert, delete, update, select, select all) 전송
1. insert method
=> Main Class에서 insert메소드 실행 시 insertSql에 기입된 내용 Oracle DB에 insert 됨
public class AddressDao1 {
public void insert() throws Exception{
String driverClass= "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@182.237.126.19:1521:xe";
String user = "DB접속정보";
String password = "DB접속정보";
String insertSql = "insert into address values(address_no_seq.nextval,'guard','김경호','123-4568','경기도 성남시')";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url,user,password);
Statement stmt = con.createStatement();
int insertRowCount = stmt.executeUpdate(insertSql);
System.out.println(">> " + insertRowCount + " 행 insert");
stmt.close();
con.close();
}
}
2. delete method
=> Main Class에서 deleteByNo메소드 실행 시 deleteSql에 기입된 내용 Oracle DB에 delete 됨
public class AddressDao1 {
public void deleteByNo() throws Exception{
String driverClass= "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@182.237.126.19:1521:xe";
String user = "DB접속정보";
String password = "DB접속정보";
String deleteSql = "delete from address where no=3";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url,user,password);
Statement stmt = con.createStatement();
int deleteRowCount = stmt.executeUpdate(deleteSql);
System.out.println(">> " + deleteRowCount + " 행 delete");
stmt.close();
con.close();
}
}
3. update method
=> Main Class에서 updateByNo메소드 실행 시 updateSql에 기입된 내용 Oracle DB에 update 됨
public class AddressDao1 {
public void updateByNo() throws Exception{
String driverClass= "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@182.237.126.19:1521:xe";
String user = "DB접속정보";
String password = "DB접속정보";
String updateSql = "update address set id='xxx',name='김경호',phone='899-9999',address='서울시 강남구' where no = 4";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url,user,password);
Statement stmt = con.createStatement();
int updateRowCount = stmt.executeUpdate(updateSql);
System.out.println(">> " + updateRowCount + " 행 update");
}
}
4. select method(1행 검색)
=> Main Class에서 selectByNo메소드 실행 시 selectSql에 기입된 내용 Oracle DB에서 select 한 뒤
ResultSet 클래스 사용하여 콘솔에 선택된 1행 출력
public class AddressDao1 {
public void selectByNo() throws Exception{
String driverClass= "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@182.237.126.19:1521:xe";
String user = "DB접속정보";
String password = "DB접속정보";
String selectSql = "select no,id,name,phone,address from address where no = 4";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url,user,password);
Statement stmt = con.createStatement();
ResultSet rs=stmt.executeQuery(selectSql);
while (rs.next()) {
int no=rs.getInt("no");
String id=rs.getString("id");
String name=rs.getString("name");
String phone=rs.getString("phone");
String address=rs.getString("address");
System.out.println(no+"\t"+id+"\t"+name+"\t"+phone+"\t"+address);
}
rs.close();
stmt.close();
con.close();
}
5. select method(전체 행 검색)
=> Main Class에서 selectByNo메소드 실행 시 selectSql에 기입된 내용 Oracle DB에서 select 한 뒤
ResultSet 클래스 사용하여 콘솔에 선택된 데이터 전체 출력
public class AddressDao1 {
public void selectAll() throws Exception{
String driverClass= "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@182.237.126.19:1521:xe";
String user = "DB접속정보";
String password = "DB접속정보";
String selectSql = "select no,id,name,phone,address from address";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url,user,password);
Statement stmt = con.createStatement();
ResultSet rs=stmt.executeQuery(selectSql);
while (rs.next()) {
int no=rs.getInt("no");
String id=rs.getString("id");
String name=rs.getString("name");
String phone=rs.getString("phone");
String address=rs.getString("address");
System.out.println(no+"\t"+id+"\t"+name+"\t"+phone+"\t"+address);
}
rs.close();
stmt.close();
con.close();
}
0. 메인 클래스 출력 시
public class AddressDao1TestMain {
public static void main(String[] args) throws Exception{
AddressDao1 addressDao1=new AddressDao1();
System.out.println("1.insert");
addressDao1.insert();
System.out.println("2.update");
addressDao1.updateByNo();
System.out.println("3.delete");
addressDao1.deleteByNo();
System.out.println("4.selectByNo");
addressDao1.selectByNo();
System.out.println("5.selectAll");
addressDao1.selectAll();
}
}
0. 메인 출력 결과
이번에는 DAO객체를 생성하여 SQL의 DML문을 JAVA에서 직접 사용해 보았습니다.
다음번에는 DAO객체 안에 객체를 사용하는 방식으로 좀 더 확장성을 넓히는 코딩을 해보겠습니다.
감사합니다.
'JAVA 연습장' 카테고리의 다른 글
DAO 클래스를 더욱 간단하게! DataSource 클래스를 따로 만들어보기 (0) | 2021.07.26 |
---|---|
VO(Value Object) 클래스를 활용해서 DAO 클래스 만들기 (0) | 2021.07.25 |
JAVA 코딩 연습 (ArrayList 활용하여 코딩 연습하기!, Feat_Iterator) (0) | 2021.06.28 |
JAVA 코딩 연습(배열 객체의 조건 case 출력 연습_ feat. 주차프로그램) (0) | 2021.06.19 |
JAVA 코딩 연습(포함을 사용해서 코딩하기!) (0) | 2021.06.13 |