Java - возвращающий BLOB-объект веб-службы SQLite - PullRequest
1 голос
/ 08 февраля 2012

У меня есть веб-сервис Java, который запрашивает базу данных SQLite, которая содержит данные больших двоичных объектов. Я возвращаю SQL-операторы, так что потребители сервиса могут просто вставить / обновить / удалить без обработки данных. Моя проблема в том, что когда я получаю данные BLOB-объектов, драйвер sqlite-jdbc сообщает, что функция getBlob не реализована. Так что мой вопрос это выполнимо? Есть ли лучший драйвер или способ выполнить эту задачу?

Спасибо!

1 Ответ

5 голосов
/ 08 февраля 2012

SQLite поддерживает тип данных BLOB. Sqlitejdbc драйвер не поддерживает метод ResultSet # getBlob (), но BLOB-объекты поддерживаются. Просто используйте ResultSet # getBytes () метод. Вот пример кода (я не добавил правильную обработку исключений в этот код, чтобы сделать его простым):

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;

public class SQLiteTest {

public static void main(String[] args) throws SQLException,
        ClassNotFoundException {
    Class.forName("org.sqlite.JDBC");
    Connection connection = DriverManager
            .getConnection("jdbc:sqlite:test.db");
    Statement statement = connection.createStatement();
    createTable(statement);
    insertBlob(connection);
    byte[] bytes = query(statement);
    System.out.println(Arrays.toString(bytes));
            statement.close();
    connection.close();
}

private static void createTable(Statement statement) throws SQLException {
    statement.execute("CREATE TABLE test (data BLOB)");
}

private static void insertBlob(Connection connection) throws SQLException {
    PreparedStatement pStatement = connection
            .prepareStatement("INSERT INTO test VALUES (?)");
    pStatement.setBytes(1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
    pStatement.execute();
    pStatement.close();
}

private static byte[] query(Statement statement) throws SQLException {
    ResultSet rs = statement.executeQuery("SELECT data FROM test");
    byte[] bytes = rs.getBytes(1);
    return bytes;
}

}
...