java.sql.SQLException: ORA-00001: unique constraint () violated 오류인데요
초월
pre도대체가 뭐가 문제인것인지... 에러가 나네요. 데이터베이스 에러라고 하는데 테이블 만든거에는 별 문제 없어보이는데 말이죠
저번에도 insert할때 중복오류가 계속 나서 기본키를 disable로 했다는..
그랬더니 데이터가 똑같은게 2개가 들어가버리고..
이 문제를 한큐에 해결 할 수 없을까요? 중복되었다고 하는거 같은데.기본키가 중복되있지 않습니다만..
그 전에 인서트시에도 왜 디비에 같은 값이 2개나 들어가는건지도 아직 못풀었고요.
create table re_board (
b_id number(5) primary key,
pwd varchar2(20) not null,
b_name varchar2(20) not null,
b_email varchar2(20) not null,
b_title varchar2(80) not null,
b_content varchar2(2000) not null,
b_date date default sysdate,
b_hit number(5) null,
b_ip varchar2(15) null,
ref number(5) null, step number(5) null, anslevel number(5) null
)
이런식으로 테이블 생성했는데요..
쓰기 게시판이고요string sql = select max(b_id), max(ref) from re_board;로 글번호, 참조번호 구하고
다시 sql = insert into re_board values(?,?,?,?,?,?,sysdate,?,?,?,?,?); 인서트로 업데이트해주는데요.
값넣고 빼기가 왜이리 안되는지 모르겠네요. 저 유니크 오류의 이유를 모르겠습니다. 알려주세요
-
이플
내안의 나님.. 제가 글썼을때는 제가 샘님 아래였는데.. ㅋ 참고로 pstmt.setInt(1, b_id) 이걸 진작에 뺐는데도 안되네요. 제가 궁금한건 왜 마지막 11번째 levels가 안되냐는거에요. 그리고 바로 밑에 업데이트도 안먹고.. 계속 catch로 빠집니다.. 답답하네요..
-
샤인
샘님보다 늦었네; 몇초차이일까? ㅋㅋ
-
움찬
select sql : select max(b_id), max(ref) from re_board
id : 1
ref : 0
ref : 1
sql : insert into re_boardvalues(b_id.NEXTVAL,?,?,?,?,?,sysdate,?,?,?,?,?)
1 : q
2 : q
3 : q
4 : q
5 : q
6 : 0
7 : 0
8 : 127.0.0.1
9 : 1
10 : 0
java.sql.SQLException: 부적합한 열 인덱스
-
길가온
제가 보기엔 pstmt.setInt(1, b_id)이것이 빠져야 한다고 생각합니다. 왜냐하면 오라클에서 b_id의 컬럼에 b_id.NEXTVAL을 통해 자동으로 넣어주기 때문이지요
pstmt.setInt(1, b_id)를 지우시고 그 다음라인의 pstmt.setString(2, pwd)를 pstmt.setString(1, pwd)로 하나씩 줄여 변환시키신 후 executeUpdate해보심이 어떠신지요?
그러시면 아마도 될거 같습니다만.. (안되면 -
good
? 표 갯수는 10개 인데..
왜 prepareStatement 에 set 할때 11, 12 가 나오는거죠?
? 갯수랑랑 일치 해야 되는거 아닌가요? -
달달항사탕
sql = \insert into rep_board values(b_id.nextval,?,?,?,?,?,sysdate,?,?,?,?,?)\;
\t\tpstmt = con.prepareStatement(sql);
pstmt.setInt(1, b_id);
.
.
-
옆집오빠야
음..제 생각에는....
간단하게 해를 들어서 현재 id의 max값이 10 이라고 가정하겠습니다.
1. A Thread max(id)의 값을 가져왔습니다.(값은 10이겠죠 ) id에 +1 을 해서 insert 하려는 시점에..
2. B Thread가 치가 들오옵니다. max(id)의 값을 가져왔습니다.(값은 10이겠죠 )
3. 이제 A Thread가 다시 insert 작업을 진행합니다..(값은 11이겠죠)
4. B Thread도 값을 1증가후 작업을 -
콩알녀
b_id를 sequence로 고치고 insert와 select문을 고쳤는데 셀렉트문이 잘못된건지 (셀렉트는 별다르게 안고침) 열인덱스가 부적합하다고 나옵니다.\t
\tString sql = \select max(b_id), max(ref) from rep_board \;
\tpstmt = con.prepareStatement(sql);
\t\trs = pstmt.executeQuery();
\t\tif(rs.next()){
\t\t\tb_id = rs. -
아잉누님
다시 말씀 드리지만, 세션값으로 넣는건 많이 비추천입니다. 서버에 걸리는 과부하가 매우 크기 때문이죠.
혹시나 해서 sequence 생성하는 것도 같이 알려드립니다.
create sequence b_id increment by 1 start with 1;
sequence를 만드신다면, insert와 select쿼리문도 각각 달라지겠죠
역시 마찬가지로 허접한 팁입니다. 태클 마구마구 환영^^ -
한봄찬
저도 초보인지라 정확히는 알 수 없으나(틀리면.... 부끄부끄;), ORA-00001에러는 기본키(Primary Key)값이 중복되는 경우에 발생하는 에러라고 알고 있습니다. 기본키 값을 number로 설정하셨으니, 해당 키 값을 웹에서 넣어주는 방식이 아닌(웹에서 넣으면 중복되는 값이 들어갈 염려가 있죠), sequence로 처리하는 방법이 어떠신지요?
아니면 해당 jsp페이지에서 세션값이나 hashmap을 사용하여 할당하는 방법도 있습니다만, 그건