2017-02-08 3 views
1

Я написал код, который поможет пользователю сохранить изображение в базе данных оракула с помощью JDBC.Загрузка фотографии и сохранение ее в базе данных Oracle 10g

PreparedStatement ps =con.prepareStatement("insert into employee values(?,?)"); 
ps.setString(1,name); 
ps.setBlob(2,inputStream); 

Но когда я пытаюсь запустить код, то получаю сообщение об ошибке

java.lang.AbstractMethodError: Method oracle/jdbc/driver/T4CPreparedStatement.setBlob(ILjava/io/InputStream;)V is abstract

Как это вызвано и как я могу решить эту проблему?

+0

Эта ошибка почти всегда означает, что вы используете различные версии библиотеки (в этом случае - драйвер JDBC или библиотека поддержки). – chrylis

+0

@AxelH, спасибо, но я загрузил ojdbc6.jar, но он тоже не работал. Я также пытался использовать 'setBinaryStream', но я столкнулся с той же проблемой. – Sampad

+0

@Sampad, какая у вас версия JDK? Поскольку JDBC для oracle 10g не поддерживает JDK 6, 7 или 8, мне интересно, может ли это быть оттуда ... – AxelH

ответ

-1

Попробуйте преобразовать свой InputStream в байт [первого] ​​и передать его в качестве параметра методу steBlob

например:

BufferedInputStream bis= new BufferedInputStream(inputStream); /// pass your inputStream here 
     int size=0; 
     byte[] bytes; 
     Blob blob = con.createBlob(); // create blob using connection obj 
     int length = 1; 
     int readCount=0; 
     System.out.println(img.getCanonicalPath()); 
     do { 
      bytes = new byte[bis.available()]; 
      readCount = bis.read(bytes); 
      blob.setBytes(length, bytes); ///populate chunks of data to the blob 
      length=length+readCount; 

      size= bis.available(); 
      //System.out.println(bis.read()); 
     }while (size > 0); 
     PreparedStatement st = con.prepareStatement("INSERT INTO TABLE VALUES (?,?)"); 
     st.setString(1, id); 
     st.setBlob(2, blob); 
     st.execute(); 
+0

Спасибо, но ты поможешь мне в сопоставлении с тем же. – Sampad

Смежные вопросы