У меня проблемы с запросом к столбцам 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?