ABOUT ME

-

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

    다음은 vo로 만들지 않은 값을 출력하고 싶을때 map을 이용하는 방법이다.

    package madang.service;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Timestamp;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import madang.common.ConnectionFactory;
    import madang.vo.BookVO;
    
    public class OrdersService {
    	public List<Long> getTimeOrderids(Timestamp a, Timestamp b) throws SQLException  {
    		List<Long> data = new ArrayList<>();
    		String sql = "SELECT ORDERID FROM orders WHERE orderdate BETWEEN ? AND ? ";
    		Connection conn = ConnectionFactory.create();
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		pstmt.setTimestamp(1, a);
    		pstmt.setTimestamp(2, b);
    		ResultSet rs = pstmt.executeQuery();
    		while(rs.next()) {
    			data.add(rs.getLong(1));
    		}
    		conn.close();
    		return data;
    	}
    	
    	
    	public List<Map<String, String>> getSaleList() throws SQLException {
    		List<Map<String, String>> mapData = new ArrayList<>();
    		String sql = "SELECT ORDERS.ORDERID , CUSTOMER.NAME, BOOK.BOOKNAME, BOOK.PRICE, ORDERS.SALEPRICE, ORDERS.ORDERDATE, BOOK.PRICE-ORDERS.SALEPRICE AS 할인금액 "
    				+ "FROM CUSTOMER, ORDERS, BOOK "
    				+ "WHERE CUSTOMER.custid =ORDERS.custid AND BOOK.bookid=ORDERS.bookid";
    		Connection conn = ConnectionFactory.create();
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		ResultSet rs = pstmt.executeQuery();
    		// ResultSet의 메타정보를 담은 객체
    		ResultSetMetaData rsmd = rs.getMetaData();
    		while(rs.next()) {
    			Map<String, String> map = new HashMap<>();
    			for(int i=0; i<rsmd.getColumnCount(); i++) {
    				map.put(rsmd.getColumnName(i+1), rs.getString(i+1));
    				//System.out.print(rsmd.getColumnName(i+1) + "\t");
    				//System.out.print(rs.getString(i+1) + "\t");
    			}
    			mapData.add(map);
    			//System.out.println();
    		}
    		conn.close();
    		return mapData;
    		
    	}
    }
    

     

     

    주문번호, 고객이름, 책 이름, 책 주문가격, 책 판매가격, 책 할인금액, 결제시기를 알아보는 메소드

    public List<Map<String, String>> getSaleList() throws SQLException {
    	List<Map<String, String>> mapData = new ArrayList<>();
    	String sql = "SELECT ORDERS.ORDERID , CUSTOMER.NAME, BOOK.BOOKNAME, BOOK.PRICE, ORDERS.SALEPRICE, ORDERS.ORDERDATE, BOOK.PRICE-ORDERS.SALEPRICE AS 할인금액 "
    			+ "FROM CUSTOMER, ORDERS, BOOK "
    			+ "WHERE CUSTOMER.custid =ORDERS.custid AND BOOK.bookid=ORDERS.bookid";
    	Connection conn = ConnectionFactory.create();
    	PreparedStatement pstmt = conn.prepareStatement(sql);
    	ResultSet rs = pstmt.executeQuery();
    	// ResultSet의 메타정보를 담은 객체
    	ResultSetMetaData rsmd = rs.getMetaData();
    	while(rs.next()) {
    		Map<String, String> map = new HashMap<>();
    		for(int i=0; i<rsmd.getColumnCount(); i++) {
    			map.put(rsmd.getColumnName(i+1), rs.getString(i+1));
    			//System.out.print(rsmd.getColumnName(i+1) + "\t");
    			//System.out.print(rs.getString(i+1) + "\t");
    		}
    		mapData.add(map);
    		//System.out.println();
    	}
    	conn.close();
    	return mapData;
    	
    }

    여러가지 정보를 동시에 출력하기 위해서는 map을 쓴다.

     

    속성을 정해준다

    Map<String, String> <?,?> 안에는 각각 map<key, valuse>를 넣어준다.

    key는 valuse를 나타내기 때문에 String을 많이 쓴다.

     

    하지만 map은 순서가 랜덤으로 뿌려진다.

     

    public static void main(String[] args) throws SQLException {
    		OrdersService service = new OrdersService();
    		List<Map<String, String>> saleList  = service.getSaleList();
    		
    		for(Map<String, String> x: saleList) {
    			System.out.println(x);
    		}
    }     

    그리고 메인 클래스에 위와같이 작성하면 값이 출력된다.

     

     

     

     

    public List<Long> getTimeOrderids(Timestamp a, Timestamp b) throws SQLException  {
    		List<Long> data = new ArrayList<>();
    		String sql = "SELECT ORDERID FROM orders WHERE orderdate BETWEEN ? AND ? ";
    		Connection conn = ConnectionFactory.create();
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		pstmt.setTimestamp(1, a);
    		pstmt.setTimestamp(2, b);
    		ResultSet rs = pstmt.executeQuery();
    		while(rs.next()) {
    			data.add(rs.getLong(1));
    		}
    		conn.close();
    		return data;
    	}

    내가 자주 까먹는 것 메소드이름(a, b)

    이렇게 정의해주면 메인 클래스에서 a, b값을 반드시 넣어 출력해야한다.

    자꾸 까먹어서 주의하자 ㅠㅠㅠ

     

    그리고 출력되는 값과 List <속성> 이건 맞춰줘야한다!

    댓글

Designed by Tistory.