2009-12-15 4 views
-1

나는 7 열과 첫 번째 여섯 열, 저장 문자열 유형 있지만 마지막 한 스토어 BLOB type.I addBirth 메서드와 그 6 문자열 유형을 얻을 마지막 열에 대한 이미지를 저장하는 SQL 테이블을 가지고, 나는 insertImageToBirthTable 방법. 사용자가 사람을 추가하기 위해 사진을 선택하지 않았기 때문에 문자열과 BLOB를 함께 저장하고 싶지 않습니다. (내 게시물을 편집했지만이 방법을 사용하여 이미지를 저장했지만 여전히 SQL 테이블에 null 값이 있습니다. 왜 ???) 또한 pathfile을 인쇄했는데 null이 아니 었습니다.어떻게 일곱 번째 열에 이미지를 설정할 수 있습니까?

내 insertImageToBirthTable 방법 :

공공 정적 무효 insertImageToBirthTable (문자열 이름, 문자열 가족, 문자열 fatherName, 문자열 motherName, 문자열 생년월일 (DateOfBirth), 문자열 placeOfBirth, 문자열 pathFile) {

try { 
    System.out.println(pathFile); 
    File file = new File(pathFile); 
    FileInputStream input = new FileInputStream(file); 
    PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("UPDATE birthtable SET image =? WHERE name = '" + name + "'AND family ='" + family + "'AND fatherName = '" + fatherName + "'AND motherName ='" + motherName + "' AND dateOfBirth = '" + dateOfBirth + "' AND placeOfBirth = '" + placeOfBirth + "'"); 
    stmt.setBinaryStream(1, input); 
    stmt.executeUpdate(); 


} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

+0

Ohoh, 내 이름은 null입니다. "> – Johanna

답변

3

예외 메시지를 읽는 중 :

매개 변수 1에 값이 지정되지 않았습니다.

그래서 ... 철자해야합니까? (힌트 :.. 당신이 당신의 PreparedStatement모든 매개 변수의 값을 지정해야합니다 하나의 값은하지 않을 것이다)

+0

감사합니다. [: |] – Johanna

1

를 나중에 이미지를 추가 할 경우에, 당신은 당신의 테이블에서 "기본 키"를해야합니다. 기본 키를 사용하면 특정 열을 쉽게 식별 할 수 있습니다. 때 마지막으로, 나중에

SELECT @@IDENTITY 

: 새로운 컬럼의 기본 키를 배울 삽입 후이 쿼리를 삽입하는 동안

ID serial, 

생략이 열을 실행 : 테이블이 같은 열을 추가 이미지를 얻을이 업데이트를 실행

update set imageBlob = ? where ID = ? 

InputStream 첫 번째 매개 변수와 두 번째의 기본 키를 사용합니다.

[편집] 이미지를 테이블에 삽입하는 방법에 대한 전체 예제는 this page을 참조하십시오.

+0

고마워, 시도해 보겠습니다. – Johanna

+0

이 쿼리는 사실입니까? id 대신 name을 사용하고 싶습니다. . 업데이트 태어남 SET 이미지 = ' "+ 입력 +"'WHERE 이름 = ' "+ 이름 +"'; – Johanna

+1

이것은'prepareStatement()'에 전달할 문자열입니다. 그런 다음 매개 변수를 설정해야합니다. ** 절대 ** 문자열 연결을 사용하여 SQL 문에 매개 변수를 추가하지 마십시오. –

0

sql에있는 모든 매개 변수 (모든 물음표)를 제공해야하므로 예외가 발생합니다.

다른 모든 열을 기본값으로 설정하는 동안 imageBlob (필자가 호출했다고 생각하는 것) 열만 제공하면 SQL에서 값을 지정할 열의 이름을 지정할 수 있습니다. 업데이트가 삽입보다 여기에 더 적합 보이지만 어떤 이미지가없는 경우,

query = ("insert into birthtable (imageBlob) VALUES (?)");

, 또 다른 옵션은이 칼럼에 대한 귀하 또는 주 삽입 및 공급 널 (null)에 포함하는 것입니다.

관련 문제