2013-04-23 3 views
2

JavaDB에서는의 Blob로 이미지를 저장하지만, 다음과 같은 방법 :자바 - 나는 데이터베이스에 이미지를 삽입하기 위해 노력하고있어

java.sql.SQLDataException를 : 시도 유형의 데이터 값을 얻기 위해 만들어졌다 'java.io.InputStream (ASCII)'유형의 데이터 값에서 'BLOB'.

데이터베이스에 BLOB를 사용하고 있습니다. 여기

내가 삽입하고 있어요 방법입니다 만 이미지의 경로를 저장에 대해, 그런데

package javaapplication16; 
import com.sun.rowset.CachedRowSetImpl; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.sql.rowset.CachedRowSet; 

public class JavaApplication16 { 

    public static void main(String[] args) throws FileNotFoundException { 
     try { 
      String driver = "org.apache.derby.jdbc.EmbeddedDriver"; 
      try { 
       try { 
        Class.forName(driver).newInstance(); 
       } catch (InstantiationException ex) { 
        Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (IllegalAccessException ex) { 
        Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      CachedRowSet crs = null; 
      crs = new CachedRowSetImpl(); 
      crs.setUrl("jdbc:derby:derbyDB; create = true"); 
      crs.setUsername("x"); 
      crs.setPassword("x"); 
      crs.setCommand("drop table tbl"); 
      crs.execute(); 
      crs.setCommand("CREATE TABLE tbl (ID blob)"); 
      crs.execute(); 
      File f = new File("/images/exam_gif_to_png.gif"); 
      crs.setCommand("insert into tbl (id) values (?)"); 
      FileInputStream fin = new FileInputStream(f); 
      crs.setBinaryStream(1, fin, (int) f.length()); 
      crs.execute(); 
     } catch (SQLException ex) { 
      Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 
} 

을, 문제는 내가 사용자가 나에게 이미지와 저장소를 보낼 수 있도록 할 것입니다 그것들을 파일에 담아서 같은 이름의 이미지가 여러 개있는 문제를 정확히 해결할 수 있을지 모르겠다. 이름이 바뀌고 좋은 해결책이 될 것인가?

+1

색인 5가 올바른 매개 변수를 참조하는지 확인하십시오. 그들은 1 색인입니다! 또한,'available()'은 추정값만을 반환합니다! – jn1kk

+0

나는 인덱스에 대해 확신합니다. –

+1

"이름이 바뀌고 좋은 해결책이 될 것입니까?" 자신의 이름 지정 체계로 이미지를 저장하고 파일에 대한 포인터와 함께 "원본 이름"을 DB에 저장해야합니다. – leonbloy

답변

0

이 시도 :

File f = new File(imagePath); 
FileInputStream fin = new FileInputStream(f); 
crs.setBinaryStream(5, fin, (int) f.length()); 

편집은 --- 편집

이 시도 :

내가 당신의 문제는 변경 사항을 전파되지 않는다는 생각합니다.

모든 명령 후 acceptChanges()으로 전화하십시오.

crs.setCommand("drop table tbl"); 
crs.execute(); 
crs.acceptChanges(); 

crs.setCommand("CREATE TABLE tbl (ID blob)"); 
crs.execute(); 
crs.acceptChanges(); 

crs.setBinaryStream(1, fin, (int) f.length()); 
crs.execute(); 
crs.acceptChanges(); 
+0

여전히 동일한 문제가 발생합니다. –

+0

@AbdulRahimHaddad가 더 많은 코드를 표시합니다. – jn1kk

+0

추가 코드 –

관련 문제