将结果集从SQL数组转换为字符串数组

时间:2013-02-18 11:16:26

标签: java arrays postgresql jdbc resultset

我正在查询PostgreSQL数据库中的information_schema.columns表。使用表名,结果集将查找所有列名,类型以及它是否可为空(主键除外,'id')。这是正在使用的查询:

SELECT column_name, is_nullable,data_type FROM information_schema.columns
WHERE lower(table_name) = lower('TABLE1') AND column_name != 'id'
ORDER BY ordinal_position;

我为每个结果都有一个字符串数组,我正在尝试使用ResultSet方法getArray(String columnLabel)来避免循环结果。我想将返回的数组存储在字符串数组中,但是会出现类型不匹配错误

Type mismatch: cannot convert from Array to String[]

有没有办法将SQL Array对象转换或类型转换为String []?

相关守则:

String[] columnName, type, nullable;

//Get Field Names, Type, & Nullability 
String query = "SELECT column_name, is_nullable,data_type FROM information_schema.columns "
        + "WHERE lower(table_name) = lower('"+tableName+"') AND column_name != 'id' "
        + "ORDER BY ordinal_position";

try{
    ResultSet rs = Query.executeQueryWithRS(c, query);
    columnName = rs.getArray(rs.getArray("column_name"));
    type = rs.getArray("data_type");
    nullable = rs.getArray("is_nullable");
}catch (Exception e) {
    e.printStackTrace();
}

5 个答案:

答案 0 :(得分:41)

使用:

Array a = rs.getArray("is_nullable");
String[] nullable = (String[])a.getArray();

正如here

所解释的那样

Array是SQL类型,getArray()返回一个要转换为java数组的对象。

答案 1 :(得分:3)

将数组概括为对象

    Object[] type; //this is generic can use String[] directly
    Array rsArray;

    rsArray = rs.getArray("data_type");
    type = (Object [])rsArray.getArray();

将它循环使用为字符串:

type[i].toString();

答案 2 :(得分:2)

如何从SQL数组设置ArrayList属性:

Array a = rs.getArray("col"); // smallint[] column
if (a != null) {
    yourObject.setListProperty(Arrays.asList((Integer[]) a.getArray()));
}

答案 3 :(得分:2)

Object[] balance = (Object[]) tableObject.getArray();

此处table Object是来自dao实现中DB过程调用的Table Type数组。在我们需要解析之后。

for (Object bal : balance) {
   Object [] balObj =(Object[]) ((Array) bal).getArray();
   for(Object obj : balObj){
       Struct s= (Struct)obj;
        if(s != null ){
             String [] str = (String[]) s.getAttributes();
             System.out.println(str);
         }
   }
}

答案 4 :(得分:1)

这可能有帮助

Object[] balance = (Object[]) ((Array) attributes[29]).getArray();
        for (Object bal : balance) {

            Object [] balObj =(Object[]) ((Array) bal).getArray();
            for(Object obj : balObj){
                Struct s= (Struct)obj;
                if(s != null ){
                    String [] str = (String[]) s.getAttributes();
                    System.out.println(str);
                }

            }

        }