Как запросить блоб? - PullRequest
       1

Как запросить блоб?

0 голосов
/ 27 января 2011

Я хочу создать SQL-запрос, который возвращает некоторые значения, и одним из этих значений является blob .

Когда я просто помещаю столбец blob в свой выбор, он возвращает BigDecimal: |

простой запрос JDBC с параметрами

Ответы [ 3 ]

2 голосов
/ 27 января 2011

Взгляните на раздел javadocs на Материализация данных BLOB-объектов .

Вам нужно вызвать getBlob в столбце BLOB-объектов и затем прочитать двоичный поток.

    Blob blob = rs.getBlob("BLOB_COLUMN_NAME");        
    InputStream blobStream = blob.getBinaryStream();

    //e.g. save blob to a file
    FileOutputStream out = new FileOutputStream("file.txt");
    byte[] buffer = new byte[1024];
    int n = 0;  
    while( (n = blobStream.read(buffer)) != -1 ) {
        out.write(buffer, 0, n);
    }
    out.flush();
    out.close();
    blobStream.close();
1 голос
/ 27 января 2011

Попробуйте вызвать метод getBytes () из ResultSet:

stmt = dbConn.prepareStatement("SELECT ...");
ResultSet rs = stmt.executeQuery();
byte[] blob = rs.getBytes(1);

Это должно вернуть ваш объект blob в виде байтового массива.

1 голос
/ 27 января 2011

Вставка ..

stmt = con.prepareStatement("INSERT INTO TABLE(fileName, "
            + "blobData) VALUES(?, ?)");
        stmt.setString(1, "somefilename");
        stmt.setObject(2, data);//data is byte[]
        stmt.executeUpdate();

Выбор ..

ResultSet rs;

    stmt = con.prepareStatement("SELECT blobData "
        + "FROM BlobTest " + "WHERE fileName = ?");

    stmt.setString(1, "somevalue");
    rs = stmt.executeQuery();
    if (!rs.next()) {
      System.out.println("No such file stored.");
    } else {
      Blob b = rs.getBlob(1);
      BufferedOutputStream os;
...