2014-01-29 4 views
2

Я написал следующий код: -Ошибка при получении данных BLOB с использованием JDBC

import java.sql.*; 
import java.util.Properties; 
import java.io.*; 

public class Retrieving_Image { 

    public static void main(String[] args) throws Exception{ 

     Properties p = new Properties(); 
     p.put("user", "system"); 
     p.put("password", "password"); 

     DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
     Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",p); 

     PreparedStatement pstmt = con.prepareStatement("select * from picture",ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);    
     ResultSet rs = pstmt.executeQuery(); 

     rs.first();//retrieving only picture    
     Blob b = rs.getBlob(1);   
     byte arr[] = new byte[(int)b.length()];   
     arr = b.getBytes(1, (int)b.length()); 

     FileOutputStream fos = new FileOutputStream("result.jpg"); 
     fos.write(arr);      
     fos.close(); 

    } 
} 

В приведенном выше коде я пытаюсь получить изображение, которое находится в 1-й индекс первой строки результирующего набора, в факт, что набор результатов имеет только одну строку. Но я получаю следующее сообщение об ошибке: -

Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.ScrollableResultSet.getBlob(I)Ljava/sql/Blob; 
at jdbc.Retrieving_Image.main(Retrieving_Image.java:24) 

С ошибочным утверждением бытием: -

Blob b = rs.getBlob(1); 

Из моего остроумия. Будет очень признателен, если кто-нибудь сможет объяснить ошибку.

+0

Смотрите здесь: http://stackoverflow.com/a/8349906/330315 прочитать блоб просто использовать 'getBinaryStream()' вместо –

ответ

0

Не могли бы вы попробовать:

((OracleResultSet) rs).getBlob(1); 
+0

@fisc OracleResultSet не может быть решена \t к типу – Vivek

0

При выборе «звезда» или «*» в

"select * from picture" 

Вы не указываете порядок столбцов, и, как таковой, нет никакой гарантии, что blob будет первым столбцом в ResultSet. Удалите звезду из оператора select и повторите попытку с помощью списка разделенных запятыми столбцов, о которых вы заботитесь. Тогда вы будете уверены, что вы выбираете правильный тип данных по указанному индексу.

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