2017-01-14 1 views
1

Derby 데이터베이스에서 테이블에 새 레코드를 추가하려고합니다. 해당 필드 중 하나에서 레코드 번호를 사용해야합니다. 예 : 사진 필드에 이미지의 경로를 저장해야합니다. 그리고 이미지의 이름은 ID와 일치해야합니다. 예 : 1.jpg. 나는 (파일 확장자는이 예제에서 사용되지 않음)이 문을 시도하고 있었다 :SQL 문에서 generated id를 사용하는 방법은 무엇입니까?

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Users (name, lastname, email, address, password, photo, lastvisit, status) VALUES ('" + name + "','" + lastname + "','" + email + "','" + address + "','" + DigestUtils.toMd5(password) + "', id, '" + now + "','user')"); 

하지만 오류 얻을 : java.sql.SQLSyntaxErrorException을 : 열 'ID'을 하나하지 목록에서의 모든 테이블에 있습니다. .. 하지만이 열은 분명히 존재합니다. 오류의 원인은 무엇입니까?

+7

관련 없음 : 'PreparedStatement' **를 올바르게 사용하는 법을 배우십시오 **. 값을 SQL 문자열로 연결하지 마십시오. 대신 자리 표시 자 ('?')를 사용하십시오. –

+0

새로 만든'Users' 레코드가 42라는 사용자 ID를 얻으면,'photo'의 값을''42 .jpg '로 바꾸고 싶습니까? 그렇다면 insert가 새 ID를 반환하거나 * 트리거에서 수행해야하는 * 후에 update 문이 필요합니다. – Andreas

+0

생성 된 ID를 얻는 방법은 http://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc를 참조하십시오. 그런 다음 그 다음 문에서 그 값을 사용하십시오. –

답변

1

글쎄, 짧은 대답은 당신이 SQL에서 그렇게 할 수 없다는 것입니다. 테이블 사용자에서 ID 열이 자동 증가 기본 키라고 생각합니다. 당신이 할 수있는 일은 당신의 레코드를 삽입 한 다음이 insert 문에 대해 생성 된 마지막 ID를 얻는 것입니다. 그런 다음 사진 열의 값을 설정하기 위해 업데이트 쿼리를 수행해야합니다. 그런데

, 확실히 나는 더비의 전문가하지만 난 당신이 생성 된 열을 얻을 수있는 방법을 볼 수있는 문서를 검색하지 않다 준비된 문

에 자리 표시자를 사용하는 방법을 배우게.

pstmt.execute(sql, Statement.RETURN_GENERATED_KEYS); 
ResultSet keys = pstmt.getGeneratedKeys(); 
keys.next(); 
int id = keys.getInt(); 
관련 문제