-
데이터베이스를 이클립스에서 출력하는 예제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 <속성> 이건 맞춰줘야한다!
'기타 > Oracle' 카테고리의 다른 글
Oracle veiw, index 생성 (0) 2020.11.27 데이터베이스를 이클립스에서 출력하는 예제1 (0) 2020.11.26 검색 데이터 조작어 (SELECT) (0) 2020.11.25 JDBC를 이용해 테이블에 입력, 삭제, 수정, 선택을 해보자. (0) 2020.11.23 DAO 이해하기 (0) 2020.11.23