sql - 在 bytea 列上使用 ANY 和数组时在 Postgres 中选择记录
问题描述
我在使用 Postgres 数据库中的 '=ANY(?)' 条件查询 bytea 列时遇到问题。我定义了一个带有 bytea 列的表,插入一个 byte[] 工作正常,但查询不返回任何结果。
看到这个片段:
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 中使用 ANY 和二进制数据选择我的数据?
解决方案
推荐阅读
- symfony4 - Symfony4 内核找不到自动加载的类
- python-3.x - 如何避免在activex autocad api上的SendCommand期间保存提示
- c - Cppcheck 在每次扫描时返回不同的结果
- json - 使用 PowerShell 嵌套 JSON
- php - 如何使用codeigniter调用具有in和out参数的oracle存储过程?
- javascript - 即使在使用 ng-selected 后也获得空白下拉值
- python - 如何在 django 中显示包含列表作为值的字典中的值
- javascript - 保存动态加载的网页
- bootstrap-4 - 刷新复选框后应取消选中
- apache-nifi - NiFi:使用 ListFile/GetFile 处理器时如何存储 maxTimestamp?