코드 작성 & DB의 데이터 읽기
5. GoodDao 클래스의 생성자 접근 지정자를 private 로 변경
코드 입력 받아 DB의 데이터를 읽어오는 메소드 생성
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import domain.Good;
public class GoodDao {
//싱글톤을 만들기 위한 코드
private static GoodDao goodDao;
public GoodDao() {}
public static GoodDao sharedInstance() {
if(goodDao==null) {
goodDao=new GoodDao();
}
return goodDao;
}
//문자열로 된 code를 입력받아서 goods 테이블에서 데이터를 찾아서 리턴하는 메소드
public Good getGood(String code) {
Good good = null;
//데이터베이스 연동을 위한 변수
//finally에서 사용하기 위해서 여기서 생성
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//문제가 발생할 가능성이 있는 코드, try-catch 구문에 넣기
try {
//오라클 드라이버 클래스 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
//데이터베이스 연결
con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.200:1521:xe",
"user23","user23");
//goods 테이블에서 code를 가지고 데이터를 조회하는 sql
pstmt=con.prepareStatement("select * from goods where code=? AND price>=?");
//pstmt.setString(1,code); <- 무엇을 의미하는건지 의문이 생김.
//code는 이미 "001"이라고 설정되어있는거 아닌가?
//일단 실행해보고 만약 2를 넣었을 경우 어떤 결과가 나오는지 확인해보자
//오류뜸. -> 1의 의미가 혹시 column일까봐 name으로 바꾸어 보아도 2는 오류.
//그럼 여기서 1의 의미 하는건 뭘까? pstmt.setString의 document 확인 필요.
//알아냄!
//첫번째 ?에 code을 넣는다.
pstmt.setString(1, code);
//확인을 위한 추가 코드
//두번째 ?에 3000을 넣어보자.
pstmt.setInt(2, 3000);
//pstmt.setInt(2, 6000);
//6000 넣으면 해당하는 조건없으니까 null
//DB의 code 1에 해당되는 구아바는 price가 5000이므로
//>>결론: pstmt.setString(1,code) 에서 1은 첫번째, 2를 넣으면 두번째 ?를 의미
//>>결론: 그 뒤의 값은 ?에 넣을 값인것
//>>>>>>> 말도안되는 추측:goods Table의 low 1개를 가져 오는 것
//>>>>>>> 말도안되는 추측:아! sql 에서 code 라는 primary key를 만들었었네~(무관)
//>>>>>>> 말도안되는 추측:아! where은 조건이었잖아~
//sql 실행
rs=pstmt.executeQuery();
//데이터읽기
//rs.next를 해서 데이터가 남아있는 경우에 중괄호 안의 코드를 실행
if(rs.next()) {
good = new Good();
good.setCode(rs.getString("code"));
good.setName(rs.getString("name"));
good.setManufacture(rs.getString("manufacture"));
good.setPrice(rs.getInt("price"));
}
}
//문제가 발생했을 때 수행하는 코드
catch(Exception e) {
//어떤 문제가 발생 했는지 확인
System.out.println("Dao-get: "+e.getMessage());
//예외 발생 위치를 확인
e.printStackTrace();
}
//무조건 수행할 코드
finally {
try {
//닫을 때는 생성되는 것의 역순으로 닫기
//생성된 경우에만 닫도록 합니다.
//생성되지 않았는데 닫으면 이미 닫혔다고 예외 발생
if(rs!=null) rs.close();
if(pstmt!=null) pstmt.close();
if(con!=null) con.close();
}catch(Exception e){}
}
return good;
}
}
6. Main 클래스의 main 메소드 수정
package main;
import dao.GoodDao;
public class Main {
//Java 응용 프로그램에서 사용되는 entry point(진입점)
//Java 응용 프로그램을 실행하면 이 메소드가 호출됩니다.
public static void main(String[] args) {
GoodDao goodDao = GoodDao.sharedInstance();
System.out.println(goodDao.getGood("001"));
}
}
'IT > Spring, 스프링(17.04.05~)' 카테고리의 다른 글
2. DB 연동 프로젝트(1) (1번 게시물 이어서) (0) | 2018.04.09 |
---|---|
1. 스프링이란, 다운로드와 설정 방법, 프로젝트 생성 (0) | 2018.04.06 |