일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 정보처리기사실기
- 상속
- 연습문제
- 자바스크립트심화
- 디버깅
- 데이터분석
- 중학1-1
- JSP/Servlet
- 오블완
- rnn
- 자바
- 딥러닝
- 머신러닝
- 순환신경망
- JDBC
- JSP
- 중학수학
- 혼공머신
- 자바스크립트
- 티스토리챌린지
- CSS
- 정보처리기사필기
- SQL
- 데이터베이스
- c언어
- 컴퓨터구조
- 파이썬
- 컴퓨터비전
- html/css
- 자바 실습
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
자바 JDBC 6 - JDBC 기초 실습해보기 6 : Delete 클래스 만들고 삭제하는 기능 구현하기 본문
이어서 Delete 클래스를 만들고 데이터를 삭제하는 기능을 구현해 보겠다.
Delete 클래스 만들기
1. 클래스 만들고 기본 코드 작성하기
그런 다음에 Scanner를 받아 정보를 삭제하는 코드를 작성해 보겠다.
2. 사용자로부터 입력하는 코드 작성하기
스캐너를 사용하는 것은 지금까지 수없이 작성했지만 아직도 next() 이 코드는 익숙해지지 않았다. 더 연습이 필요할 것 같다.
3. 캡슐화하여 객체 생성하기
하지만 두 개짜리 생성자는 아직 없어서 오류가 뜬다. 이것을 Student 클래스에서 추가해 보기로 하자. Student 클래스에서 코드를 작성하다 하나 빼먹은 코드가 있어서 이 부분을 정리하려고 한다. 그래서 매개변수에 null을 추가해야만 코드 오류가 발생하지 않았다.
난 선생님이 코드를 잘못 쓰셨나 생각했다.
Student 클래스에서 수정할 부분
1. 생성자 3개를 받는 매개변수 오버로딩하기
이 코드가 빠져있었다.
그런 다음 객체 생성의 매개변수에 4개로 된 부분의 null을 지웠고 버퍼 코드도 삭제해 주었다. null을 지워도 이젠 오류가 뜨지 않는다.
2. 생성자 2개 받는 매개변수 오버로딩하기
하지만 여전히 age에서 오류가 뜨는 이유는 무엇일까? 오류가 뜨는 이유는 Student 클래스에 정의된 생성자와 stu 객체를 초기화할 때 사용하는 생성자의 매개변수가 일치하지 않거나, 다른 이유로 올바르게 초기화되지 않았기 때문이야.
확인해야 할 사항
1. 오류 메시지 확인
- 정확한 오류 메시지가 무엇인지 확인하고, 그것을 토대로 문제를 해결해야 한다.
- 예를 들어, 오류가 매개변수 타입 불일치 때문인지, 클래스 경로 문제 때문인지 확인해야 한다.
2. 생성자 호출과 매개변수 타입 확인
- Student stu = new Student(name, age); 호출 시, name과 age 변수의 타입이 생성자에 정의된 타입과 일치해야 함
public Student(String name, int age) {
- name: String 타입
- age: int 타입
- name이나 age 변수에 잘못된 타입(예: null이거나 double, String 대신 다른 타입 등)이 들어가면 오류가 발생할 수 있다.
3. 변수 초기화 여부
- name과 age 변수가 초기화되지 않은 상태에서 사용되면 오류가 발생할 수 있다.
String name;
int age;
Student stu = new Student(name, age); // 오류 발생: name과 age가 초기화되지 않음
- 이런 경우, name과 age를 초기화해야 함
String name = "홍길동";
int age = 25;
Student stu = new Student(name, age); // 정상 작동
이제 문제를 해결해 보기로 하자.
3. 빨간 줄이 뜨는 문제 해결해 보기
age 필드를 생성하는 것을 클릭하니 이렇게 static으로 만들어졌다.
이렇게 하니 빨간 줄이 사라졌다. private static int age; 필드를 추가해서 빨간 줄이 사라졌다고 해도, 이 방법은 권장되지 않아. 왜냐하면 age는 입력값으로 받아야 하는데, static int age로 선언하면 프로그램 전체에서 공유되는 값이 되어버려. 이것은 잘못된 설계로 이어질 수 있어.
수정해야 할 점
1. age를 Scanner로 입력받아 초기화하기
- age를 정적으로 선언할 필요 없이, 입력값으로 받아서 Student 생성자에 전달하면 된다.
2. age 초기화를 올바르게 처리
- Scanner로 사용자 입력값을 받아야 age가 올바르게 초기화된다.
수정한 코드
문제의 원인을 찾았다. 그것은 Scanner를 사용할 때 입력하는 기능을 추가하지 않은 거였다. 이 부분을 꼭 잊어버린다. 이 내용을 쓰지 않으면 어떤 일이 벌어지는지 코드를 통해 확인했으니 다음에는 실수하지 않을 것 같다.
그냥 단순히 쓰라고 하니까 쓰는 게 아니라 왜 그래야 하는지 이유를 알게 되면 다음에도 이 내용을 기억하기 쉬워진다.
Delete 클래스 이어서 작업하기
1. 동적 로딩
2. 연결 권한 확인
이미 다 아는 거니 설명은 생략한다. 이제 자원 반납을 하기 위해 Connection과 PrepareStatement의 변수를 null로 선언한다.
3. 전역 변수로 선언하기
전역변수로 선언하면 자동으로 이렇게 import 된다.
4. con으로 연결 권한 확인하기
DriverManager.getConnection() 메서드는 데이터베이스와의 연결을 나타내는 Connection 객체를 반환한다. 이 con 객체를 통해 SQL 쿼리를 실행하거나 데이터베이스 작업을 수행할 수 있다.
catch 문으로 오류 발생 코드를 추가해 주었다.
5. 쿼리문 작성하기
쿼리문을 작성하고 psmt에 넣어준다.
6. 쿼리문 이동하고 실행하기
그런 다음 자원을 반납하는 코드를 작성한다.
7. 자원 반납하기
8. 코드 실행하기
실제 데이터에 있는 값을 입력해야지 없는 값을 입력하면 이처럼 오류가 뜬다.
일치하는 행이 있을 경우 이렇게 삭제가 된다.
학습을 마치고
원래 6시까지 Select 클래스까지 다 만들고 수업을 들으려고 했는데 아직 Delete밖에 만들지 못했다. 중간에 오류가 발생해서 그 문제를 한참 머리를 싸매가 해결하는데 시간을 보냈기 때문이다. 하지만 이를 통해 생성자와 오버로딩에 대해 확실히 이해할 수 있었다.
그리고 클래스에서 선언한 생성자 매개변수의 개수와 각 클래스에서 불러온 생성자의 매개변수의 개수가 일치해야 한다는 것도 알게 되었다. 정말 큰 수확이다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바 JDBC 8 - JDBC 기초 실습해보기 8 : Select 클래스에서 rs에 저장된 값 가져와서 출력하기 (1) | 2024.12.13 |
---|---|
자바 JDBC 7 - JDBC 기초 실습해보기 7 : Select 클래스 만들고 동적로딩하기 + RS의 특징 알아보기 (0) | 2024.12.13 |
자바 JDBC 5 - JDBC 기초 실습해보기 5 : Update 클래스에서 사용한 자원 반납하기 (0) | 2024.12.13 |
JDBC 프로그래밍 3 - MySQL 사용법 2 : MySQL Workbench을 이용한 레코드 추가 및 수정, 삭제하기 (0) | 2024.12.12 |
JDBC 프로그래밍 2 - MySQL 사용법 1 : MySQL Worbench를 이용한 테이블 생성 (0) | 2024.12.12 |