매장 등록도 예약 등록과 같은 맥락입니다.
먼저 Console(View)부분을 살펴보겠습니다.
public Restaurant Enroll() throws SQLException {
System.out.println("등록을 시작합니다.");
Scanner sc = new Scanner(System.in);
System.out.println("지점명 : ");
String name = sc.next();
System.out.println("위치 : ");
String location = sc.next();
System.out.println("지점장 : ");
String owner = sc.next();
System.out.println("좌석 수 : ");
int seat = sc.nextInt();
Restaurant r = new Restaurant(name,location,owner,seat);
return r;}
지점명, 위치, 지점장, 좌석 수를 입력받고
Restaurant 객체에 넣어서 리턴합니다. (DTO)
package com.puft.franc.main;
public class Restaurant {
int number;
String name;
String location;
String Owner;
int seat;
public Restaurant(String name, String location, String Owner, int seat ) {
name = this.name;
location = this.location;
Owner = this.Owner;
seat = this.seat;
}
public void printInfo() {
System.out.println(this.number);
System.out.println(this.name);
System.out.println(this.location);
System.out.println(this.Owner);
System.out.println(this.seat);
}
}
Restaurant 클래스입니다.
자동 생성자를 생성하여
데이터를 넘겨주는 역할을 합니다.
다음은 DAO 클래스 (Model 부분)
을 살펴보겠습니다.
public void Enroll(String name, String location, String owner, int seat) throws SQLException {
마찬 가지로
DTO의 데이터들을
파라미터로 받아옵니다.
con = PuftDBManager.connect();
String sql = "insert into jan07_restaurant values(r_seq.nextval, ? ,?, ?, ?)";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, location);
pstmt.setString(3, owner);
pstmt.setInt(4, seat);
if(pstmt.executeUpdate() == 1) {
System.out.println(name + " 매장이 등록되었습니다.");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
PuftDBManager.close(con, pstmt, rs);
}}
파라미터로 받아온 데이터들을
SQL문에 넣습니다.
Controller를 살펴보겠습니다.
else if(option == 2) {
Restaurant r = cs.Enroll();
d.Enroll(r.name,r.location,r.Owner,r.seat);}
cs.Enroll메소드를 통해 리턴된 객체를
새로운 Restaurant객체 변수에 넣어주고
d.Enroll 파라미터로 r의 변수들을 넣어줍니다.
실행시켜보니
null
null
java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("EKDH3904"."JAN07_RESTAURANT"."R_NAME")
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:526)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:462)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:553)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:269)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:270)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:91)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:970)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1213)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3671)
at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1426)
at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:3761)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3741)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1063)
at com.puft.franc.main.DAO.Enroll(DAO.java:88)
at com.puft.franc.main.Controller.<init>(Controller.java:44)
at com.puft.franc.main.Controller.main(Controller.java:76)
Caused by: Error : 1400, Position : 52, Sql = insert into jan07_restaurant values(r_seq.nextval, :1 ,:2 , :3 , :4 ), OriginalSql = insert into jan07_restaurant values(r_seq.nextval, ? ,?, ?, ?), Error Msg = ORA-01400: cannot insert NULL into ("EKDH3904"."JAN07_RESTAURANT"."R_NAME")
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:530)
... 17 more
Exception in thread "main" java.lang.NullPointerException
at com.puft.db.manager.PuftDBManager.close(PuftDBManager.java:19)
at com.puft.franc.main.DAO.Enroll(DAO.java:98)
at com.puft.franc.main.Controller.<init>(Controller.java:44)
at com.puft.franc.main.Controller.main(Controller.java:76)
계속해서 Null값이 들어가는 에러가 떴습니다.
public Restaurant(String name, String location, String Owner, int seat ) {
this.name = name;
this.location = location;
this.Owner = Owner;
this.seat = seat;
알고보니 생성자 선언이 반대로 되어있었습니다...
name = this.name
계속해서 null값이 들어가고 있었습니다.
지점명 :
최가네
위치 :
동탄
지점장 :
최씨
좌석 수 :
345
최가네
최가네
최가네 매장이 등록되었습니다.
잘 돌아가는 것을 확인했습니다.
생성자 단축키 설정이 안되어있어서
직접 코딩했는데 반대로 쓴 게 문제였네요.
기초를 복습할 필요가 있는 것 같습니다.
'Java > 실습' 카테고리의 다른 글
[Java] 찾기 (1) | 2025.01.08 |
---|---|
[Java] 전체 확인 (0) | 2025.01.08 |
[Java] 예약하기 (0) | 2025.01.08 |
[Java] 맛집 탐색 (2) | 2024.12.20 |
[Java] 지하철 - JSON 실습 (0) | 2024.12.19 |