如何使用java或jdbcTemplate从Postgre获取二维数组

如何使用java或jdbcTemplate从Postgre获取二维数组,java,sql,arrays,spring,postgresql,Java,Sql,Arrays,Spring,Postgresql,当我在控制台中执行这样的代码时 SELECT dimensions FROM public."NEWS" WHERE id = 5 我得到这个:(整数数组) 但是当我用java编写代码时 ArrayList<String[][]> dimensions = new ArrayList<>(); try { PreparedStatement ps = dataSource.getConnection().prepareStatement(

当我在控制台中执行这样的代码时

SELECT dimensions FROM public."NEWS" WHERE id = 5
我得到这个:(整数数组)

但是当我用java编写代码时

ArrayList<String[][]> dimensions = new ArrayList<>();
try {
    PreparedStatement ps =
        dataSource.getConnection().prepareStatement(
                "SELECT dimensions::varchar[][] FROM public.\"NEWS\" WHERE id = "+id+";");
    ResultSet rs = ps.executeQuery();
    while(rs.next()) {
        dimensions.add((String[][]) rs.getArray(1).getArray());
    }
} catch (SQLException ignored) {}
ArrayList维度=新建ArrayList();
试一试{
编制报表=
dataSource.getConnection().prepareStatement(
“从public中选择维度::varchar[][]。\“NEWS\”其中id=“+id+”;”;
结果集rs=ps.executeQuery();
while(rs.next()){
添加((字符串[][])rs.getArray(1.getArray());
}
}catch(忽略SQLException){}
我在第行得到了NullPointerException:
dimensions.add((String[])rs.getArray(1.getArray())

如何使用java或Spring Framework中的jdbcTemlate从Postgre中获取二维数组?

按照上的代码,这段代码似乎工作正常:

Class.forName("org.postgresql.Driver");

Connection connection = DriverManager.getConnection(
        "jdbc:postgresql://127.0.0.1:5432/testdb",
        "testdb",
        "testdb");

ResultSet rs = connection.prepareStatement("SELECT * FROM sal_emp").executeQuery();

rs.next();

java.sql.Array a1 = rs.getArray(2);
Integer[] o1 = (Integer[])a1.getArray();

java.sql.Array a2 = rs.getArray(3);
String[][] o2 = (String[][])a2.getArray();

是否有特定的原因需要将响应作为二维数组。除非您绝对需要2D数组,否则不应将行映射为数组。这是一个Oracle问题?@Karl Nicholas。我不明白公司的名称与我的问题有什么共同之处。如果你指的是Oracle数据库,我不使用Oracle数据库。Postgresql数据库和带有Spring框架的Java8。还有Spring的类JdbcTemplate。@是的,我可以将列转换为一维数组。只是有点遗憾,我不能使用2D阵列。看起来org.postgresql.jdbc.PgArray就是用来做这个的。非常感谢。它对我有用!!!(我把整数[]改为整数[],把索引2和3改为1)=是的,我以为你得到的是整数数组。。。欢迎
Class.forName("org.postgresql.Driver");

Connection connection = DriverManager.getConnection(
        "jdbc:postgresql://127.0.0.1:5432/testdb",
        "testdb",
        "testdb");

ResultSet rs = connection.prepareStatement("SELECT * FROM sal_emp").executeQuery();

rs.next();

java.sql.Array a1 = rs.getArray(2);
Integer[] o1 = (Integer[])a1.getArray();

java.sql.Array a2 = rs.getArray(3);
String[][] o2 = (String[][])a2.getArray();