Выбор записей в Postgres при использовании ЛЮБОГО и массивов в столбцах bytea - PullRequest
0 голосов
/ 21 февраля 2020

У меня проблемы с запросом к столбцам bytea с использованием условия '= ANY (?)' В моей базе данных Postgres. Я определяю таблицу со столбцом bytea, вставка байта [] работает нормально, но запрос не возвращает никаких результатов.

См. Этот фрагмент:

    private static void selectBytes(String url, String username, String password) throws Exception
{
    Class.forName("org.postgresql.Driver");

    Connection conn = DriverManager.getConnection(url, username, password);

    Statement statement = conn.createStatement();
    statement.execute("create table bytetest(x bytea)");
    statement.close();

    PreparedStatement ps = conn.prepareStatement("insert into bytetest(x) values(?)");
    ps.setBytes(1, new byte[] { 1, 2, 3, 4 });
    ps.execute();
    ps.close();

    statement = conn.createStatement();
    ResultSet rs = statement.executeQuery("select count(*) from bytetest");
    rs.next();
    System.out.println("Number of records: " + rs.getInt(1));
    rs.close();
    statement.close();

    ps = conn.prepareStatement("select count(*) from bytetest where x = ANY(?)");
    Array array = conn.createArrayOf("bytea", new Object[] { new byte[] { 1, 2, 3, 4 } });
    ps.setArray(1, array);
    rs = ps.executeQuery();
    rs.next();
    System.out.println("Number of selected records: " + rs.getInt(1));
    rs.close();
    ps.close();

    ps = conn.prepareStatement("select count(*) from bytetest where x = ?");
    ps.setBytes(1, new byte[] { 1, 2, 3, 4 });
    rs = ps.executeQuery();
    rs.next();
    System.out.println("Number of selected records directly: " + rs.getInt(1));
    rs.close();
    ps.close();

    conn.close();
}

Вывод:

Number of records: 1
Number of selected records: 0
Number of selected records directly: 1

Вывод из журнала показывает, что массив не интерпретируется так же, как одно значение.

LOG:  execute <unnamed>: select count(*) from bytetest where x = ANY($1)
DETAIL:  parameters: $1 = '{{"\\x31","\\x32","\\x33","\\x34"}}'
LOG:  execute <unnamed>: select count(*) from bytetest where x = $1
DETAIL:  parameters: $1 = '\x01020304'

Это с PostgreSQL 9.6.3 и postgresql -42.2.10 водитель. Как я могу выбрать свои данные с ЛЮБЫМИ и двоичными данными в PostgreSQL?

...