ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스를 이클립스에서 출력하는 예제1
    기타/Oracle 2020. 11. 26. 16:08

    작성한 예제를 파헤쳐보자.

    package madang.common;
    
    import java.sql.*;
    
    public class TestMain {
    	public static void main(String[] args) {
    		try {
    			Connection conn = ConnectionFactory.create();
    			String sql = "SELECT Customer.NAME, SUM(Orders.SALEPRICE) "
    					+ "FROM Customer, Orders "
    					+ "WHERE Customer.custid =Orders.custid "
    					+ "GROUP BY Customer.NAME "
    					+ "ORDER BY Customer.NAME";
    			PreparedStatement pstmt = conn.prepareStatement(sql);
    			ResultSet rs = pstmt.executeQuery();
    			while(rs.next()) {
    				System.out.printf("%s\t %d\t \n", rs.getString(1), rs.getInt(2));
    			}
    			System.out.println("====================");
    			//고객들이 주문한 도서 총액, 평균, 최소값, 최대값
    			String sql2 = "SELECT Customer.NAME, SUM(Orders.SALEPRICE), AVG(Orders.SALEPRICE), MIN(Orders.SALEPRICE), MAX(Orders.SALEPRICE) "
    					+ "FROM Customer, Orders "
    					+ "WHERE Customer.custid =Orders.custid "
    					+ "GROUP BY Customer.NAME "
    					+ "ORDER BY Customer.NAME";
    			PreparedStatement pstmt2 = conn.prepareStatement(sql2);
    			ResultSet rs2 = pstmt2.executeQuery();
    			while(rs2.next()) {
    				System.out.printf("%s\t %d\t %d\t %d\t %d\t \n", rs2.getString(1), rs2.getInt(2), rs2.getInt(3), rs2.getInt(4), rs2.getInt(5));
    			}
    			
    			conn.close();
    			rs.close();
    			rs2.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    	}
    
    }
    

     

    현재 madang이란 데이터 베이스 안에는 Book, Customer, Orders 라는 테이블이 존재한다.

     

    MAIN 클래스에서 값을 출력할때는 try/catch 하거나 throws SQLException로 예외처리를 해준다.

     

    sql (질의를 이용할때) 반드시 인터페이스를 이용할 필요는 없다.

     

     

    다음은 고객이 구매한 책의 총 금액을 구하는 질문이다 (고객이름 : 구매한 책의 총액)

    Connection conn = ConnectionFactory.create();
    String sql = "SELECT Customer.NAME, SUM(Orders.SALEPRICE) "
    		+ "FROM Customer, Orders "
    		+ "WHERE Customer.custid =Orders.custid "
    		+ "GROUP BY Customer.NAME "
    		+ "ORDER BY Customer.NAME";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    ResultSet rs = pstmt.executeQuery();
    while(rs.next()) {
    	System.out.printf("%s\t %d\t \n", rs.getString(1), rs.getInt(2));
    }

    가장 먼저 질문을 작성한다.

    구해야하는 값은 고객이름(Customer.NAME)과 총액(SUM(Orders.SALEPRICE)) 이다.

    이전까지는 한 테이블에서만 값을 뽑으면 됐지만 지금은 2개의 테이블이다. 

     

    이럴때 사용하는 것이 join 이다.

    join도 아무 테이블이나 연결 할 수 없다

    반드시 공통으로 가지는 key값이 있어야

    "WHERE Customer.custid =Orders.custid "

    이처럼 연결해서 각각 테이블 값을 가져와 조합할 수 있다.

     

    출력은 SELECT 뒤에 값을 등록한 순서대로 나온다.

    그렇기 때문에 출력시에도 순서와 모양을 맞춰줘야한다.

     

    Customer.NAME = getString

    SUM(Orders.SALEPRICE) = getInt

     

    순서를 맞춰주지 않으면 에러가 난다.

     

    댓글

Designed by Tistory.