Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 일기

DAO(Data Access Object) 사용해서 JDBC 코딩 해보기 1 (feat. 객체 없이 직접 데이터 값 DAO에 넣고 출력) 본문

JAVA 연습장

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객체 안에 객체를 사용하는 방식으로 좀 더 확장성을 넓히는 코딩을 해보겠습니다.

 

감사합니다.

Comments