본문 바로가기

Java/실습

[Java] 매장 등록

매장 등록도 예약 등록과 같은 맥락입니다.

먼저 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