티스토리 뷰
- 오늘의 할 일 -
1. main 페이지는 어디에?
- 관리자 상품등록페이지(adinpage)를 연락처 ver.0.6 이랑 비교해봤을때
이 페이지가 main이 아니면 안될 것 같음...
근데 그럼 사용자의 상품구매 페이지도.. main이 없는데?
2. 사용자 로그인 신규 등록 페이지 DB 연동하기
1. adminpage 에서 ContactDAO 초기화 문제
원래 코드 ::
private static ContactDAO dao;
ContactDAO 클래스를 참조하는 dao라는 private static 변수를 선언하는 코드인데
원래 코드에서는 main 클래스여서 main문 안에 dao를 초기화할 수 있었음
근데 adminPage는 main클래스가 없음
// 싱글톤 객체 가져오기
private ProductDAO dao = ProductDAOImple.getInstance();
그래서 이것저것 해보다가 이렇게 바꿈.
코드 설명 :
ProductDAOImple 클래스에서 정적 메소드인 getInstance()를 호출하여 해당 클래스의 인스턴스를 반환하는 코드.
디자인 패턴 중 하나인 싱글톤 패턴을 사용함.
즉, ProductDAO의 인터페이스를 구현한 클래스의 싱글톤 인스턴스를 'dao' 변수에 할당하는 것.
'dao' 변수를 초기화할 때 한 번만 해당 인스턴스를 생성하게 된다.
* 싱글톤 패턴이란 어플리케이션 내의 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 디자인 패턴
private void insertProd() {
int result = 0;
int Id = Integer.parseInt(textId.getText());
String name = textName.getText();
double price = Double.parseDouble(textPrice.getText());
int stock = Integer.parseInt(textStock.getText());
System.out.println("읽기 성공");
ProductVO vo = new ProductVO(Id, name, price, stock);
System.out.println("상품 등록 성공!");
try {
// ProductDAOImple 클래스는 ProductDAO 인터페이스를 구현하고 있어야 합니다.
//ProductDAO dao = new ProductDAOImple();
result = dao.insert(vo);
// 위의 코드에서 오류가 발생하지 않는다면 이하의 코드는 동일하게 유지합니다.
int size = dao.select().size();
System.out.println("크기 측정 완료!");
if(result == 1) { // 스크롤 테이블에 보여지는게 안댐ㅎㅎ
txtAreaInfo.setText("등록된 상품 개수 : " + size + "\n"
+ "등록 완료했습니다.");
}
} catch (Exception e) {
e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
}
}//end insertProd()
형광펜 친 부분,,, txtAreaInfo에 출력이 안됨.. 다른 메소드들도 마찬가지임
앗 해결 !
원래 있던거 주석처리하고 위에 저렇게 하니깐 됐음ㅎ
계속 nulpointexception떠서 빡쳤는데 해결됐다.
왤까... 왜 됐을까.. 이유는 모르겠다
2. 사용자 로그인 신규 등록 페이지 DB 연동하기
내용을 입력하고 등록을 누르면 DB에 등록되고
콘솔창에 1행이 삽입됐다고 뜸
회원의 정보들은 관리자페이지에서만 확인가능하게 만들 것
insertUser() 메소드를 만들었음
아래가 작성 코드
private void insertUser() {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
// PreparedStatement : 매개변수를 갖고 있는 SQL 문장을 활용하기 위한 클래스
// Statement와 상속관계
try {
// 2. Oracle JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
// 3. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 4. Connection 객체를 사용하여 PreparedStatement 객체를 생성
pstmt = conn.prepareStatement(CUST_INSERT);
// 5. SQL 문장 완성 - SQL_INSERT 쿼리의 ?를 채워주는 코드
pstmt.setString(1, textFieldId.getText());
pstmt.setString(2, textFieldPw.getText());
pstmt.setString(3, textFieldName.getText());
pstmt.setString(4, textFieldContact.getText());
// 6. SQL 문장 실행(DB 서버로 SQL 전송)
result = pstmt.executeUpdate();
// 7. DB 서버가 보낸 결과 확인/처리
System.out.println(result + "행이 삽입됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//return result; // 0 : 실패, 1 : 성공
}//end insertUser()
원래 코드에서 이 부분을 수정.
입력한 부분을 읽어와서 DB에 넣어주기
DB연결을 위해 Customer쿼리를 implements 함
이제 이 부분을 채우는 코드를 작성!
메소드 생성
private void CustomerLogin() {
// DB에서 고객 정보를 가져오기
ArrayList<CustomerVO> List = OracleCustomerOuery.getAllCustomers();
// 사용자가 입력한 Id,Pw
String inputId = textID.getText();
String inputPw = textPW.getText();
// DB에서 가져온 고객 정보와 입력된 아이디와 비밀번호를 비교하여 로그인 처리
for(CustomerVO vo : List) {
if(vo.getCustomerId().equals(inputId) && vo.getPassword().equals(inputPw)) {
//로그인 성공
System.out.println("로그인 성공");
// 상품 구매 페이지로 넘어가게 하기
UserPage purchase = new UserPage(vo.getCustomerName());
purchase.setVisible(true);
// 현재 로그인 창 닫기
dispose();
// 로그인 성공했으면 반복문 나가기
return;
}
}
// 로그인 실패
System.out.println("로그인을 실패했습니다.");
}//end CustomerLogin()
CustomerVO를 가져왔기 때문에... id,pw,name,contact 다 받아옴
그래서
vo.getCustomerName()으로 이름을 가져올 수 있음..
제대로 된 방법은 아니지만 어쩔 수 없다
UserPage로 넘어가서 이렇게 입력하구
name 입력
이렇게 잘 나옴,,,
아 그리고
상품을 클릭했을 때
수량 선택해서 구매하도록 다시 재설정할듯
'백엔드 교육과정 > 3월' 카테고리의 다른 글
2024.03.14_ 사이드 프로젝트 보완 (0) | 2024.03.15 |
---|---|
2024.03.13 _ 중간피드백 이후 수정 내용 (0) | 2024.03.13 |
2024.03.07_ 사이드 프로젝트 (0) | 2024.03.07 |
사이드 프로젝트 보강 (0) | 2024.03.06 |
2024.03.06_ 상품 관리, 구매 프로그램 (0) | 2024.03.06 |