일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체 배열
- DropDown
- switch-case
- 컬렉션프레임워크
- 접근제한자
- color code
- 삼항(조건) 연산자
- var 변수
- 변수 기본형
- 관계 연산자
- count_program
- SQLIntegrityConstraintViolationException
- 배열 array
- IF else
- Scanner
- 간단한 연산
- Math 함수
- 형변환 연산자
- 문자열 비교
- decimalformat
- Do while
- 표 구현
- 가위바위보 게임
- 할당 연산자
- 반복문
- Style Sheet
- 변수
- 논리 연산자
- 업다운 게임
- 유효성 검사
- Today
- Total
무룩 공부방
[Java03] DB연동 연습 (2) (Eclipse, SQL Developer) 본문
# 문제
고교 성적처리 프로젝트를 작성하라
<VO>
package java03_jdbc.dao;
public class HighVo {
private String syear;
private String sclass;
private String sno;
private String sname;
private String birth;
private String gender;
private String tel1;
private String tel2;
private String tel3;
public String getSyear() {
return syear;
}
public void setSyear(String syear) {
this.syear = syear;
}
public String getSclass() {
return sclass;
}
public void setSclass(String sclass) {
this.sclass = sclass;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getTel1() {
return tel1;
}
public void setTel1(String tel1) {
this.tel1 = tel1;
}
public String getTel2() {
return tel2;
}
public void setTel2(String tel2) {
this.tel2 = tel2;
}
public String getTel3() {
return tel3;
}
public void setTel3(String tel3) {
this.tel3 = tel3;
}
}
package java03_jdbc;
import java.util.Scanner;
import java03_jdbc.dao.HighDao;
public class HighSchool {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HighDao dao = new HighDao();
boolean flag = true;
while(flag) {
System.out.print("[1]입력 [2]검색 [3]수정 [4]삭제 [5]종료 : ");
int menu = sc.nextInt();
switch(menu) {
case 1 :
dao.view();
break;
case 5 :
System.out.println("종료");
flag = false;
break;
}
}
sc.close();
}
}
package java03_jdbc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Scanner;
import java03_jdbc.db.Db;
public class HighDao {
Scanner sc = new Scanner(System.in);
public void view() {
System.out.print("학년 반 번호 이름 생년월일 성별 전화1 전화2 전화3 입력 : ");
String syear = sc.next();
String sclass = sc.next();
String sno = sc.next();
String sname = sc.next();
String birth = sc.next();
String gender = sc.next();
String tel1 = sc.next();
String tel2 = sc.next();
String tel3 = sc.next();
HighVo vo = new HighVo();
vo.setSyear(syear);
vo.setSclass(sclass);
vo.setSno(sno);
vo.setSname(sname);
vo.setBirth(birth);
vo.setGender(gender);
vo.setTel1(tel1);
vo.setTel2(tel2);
vo.setTel3(tel3);
insert(vo);
}
public void insert(HighVo vo) {
Db db = Db.getDb();
Connection conn = db.getConnection();
System.out.println(conn);
PreparedStatement pstmt = null;
String sql = "insert into tbl_student (syear,sclass,sno,sname,birth,gender,tel1,tel2,tel3) "
+ "values (?,?,?,?,?,?,?,?,?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getSyear());
pstmt.setString(2, vo.getSclass());
pstmt.setString(3, vo.getSno());
pstmt.setString(4, vo.getSname());
pstmt.setString(5, vo.getBirth());
pstmt.setString(6, vo.getGender());
pstmt.setString(7, vo.getTel1());
pstmt.setString(8, vo.getTel2());
pstmt.setString(9, vo.getTel3());
pstmt.executeUpdate();
System.out.println("OK");
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exception");
e.printStackTrace();
} finally {
}
}
}
위의 결과를 얻는데 굉장히 우여곡절이 많았었다. 이전에 진행한 프로젝트의 코드와 유사한 형식으로 연습하였기 때문에 오류가 발생 할 것이하고는 생각지 못했는데 SQL Developer와 연동하여 데이터를 입력하는 과정에서 처리가 제대로 되지 않았었다.
그 이유를 찾기 위해 상당히 고전했는데 DB접속과 주소체크, 오타 수정, 메인프로젝트 구성변경 등 많은 시도를 한 끝에 SQLIntegrityConstraintViolationException가 가장 큰 걸림돌이란 걸 알게 되었다.
인터넷을 찾아보니 SQL Developer와 연동하여 데이터를 입력하며 Primary Key를 중복하여 여러번 같은데이터로 삽입한 문제인 것 같았다. 하여 테이블을 삭제하고 다시 같은 형식으로 생성한뒤 이클립스와 SQL Developer를 다시 실행하니 해결되었다.
그 동안 학습했던 것 이외에도 규칙을 위반할 수도 있다는 것을 알게 되었다. 이는 추후에 DB를 더 학습하면서 공부해나가야 할 부분인 것 같다.
<참고 블로그>
[MySQL] SQLIntegrityConstraintViolationException 원인 및 해결 방안 : 네이버 블로그 (naver.com)
[MySQL] SQLIntegrityConstraintViolationException 원인 및 해결 방안
Column 'SEQ' in field list is ambiguous MySQL 사용 시 무결성 제약조건에 위배되는 ...
blog.naver.com
PreparedStatement.executeUpdate();가 동작하지 않을 때 (tistory.com)
PreparedStatement.executeUpdate();가 동작하지 않을 때
결론은 '껐다 켜기'다. JDBC를 통해 DB를 연동하면 자바를 통해 SQL 문을 수행할 수 있다. 이때 PreparedStatement 객체를 만들어 SQL 문을 저장한다. 만약 SQL문이 update, delete, insert 중 하나면 PreparedStatement
change-words.tistory.com
'IT > Java03_JDBC' 카테고리의 다른 글
[Java03] DB연동 연습 (1) (Eclipse, SQL Developer) (2) | 2023.10.15 |
---|---|
[Java03] 데이터 베이스(Database)와 싱글톤 (Eclipse, SQL Developer) (0) | 2023.10.15 |