【问题标题】:I can't read in java returned array from plpgsql function我无法从 plpgsql 函数读取 java 返回的数组
【发布时间】:2015-06-16 03:44:33
【问题描述】:

Postgres plpgsql 函数:

CREATE OR REPLACE FUNCTION usersList()
RETURNS TABLE(at varchar,name varchar,surname varchar)  AS $$
    BEGIN
        RETURN QUERY SELECT * FROM users;
    END;
$$ LANGUAGE plpgsql;

还有java代码

result = Pstatement.executeQuery("Select usersList() ");
while(result.next()) {
    System.out.println(result.getString(("at")));
    System.out.println(result.getString(("name")));
    System.out.println(result.getString(("surname")));
}

Java 错误 sql 异常信息:

Message: The column name at was not found in this ResultSet.
SQLState: 42703
ErrorCode: 0

如何从函数返回所有表列,然后在 java 中打印它们?

【问题讨论】:

  • 试试SELECT * FROM usersList()
  • 是的,SELECT usersList()usersList() 视为一个字段,并将输出列打包成单个值(record 类型)。 SELECT * FROM usersList()usersList() 视为一个表格,并为您提供您期望的结果。
  • 它真的很有效。谢谢你。添加为答案以将其投票为正确的!!!

标签: java arrays postgresql return plpgsql


【解决方案1】:

您可以使用result.getMetaData().getColumnCount()查看您检索到的列数,然后您可以调用result.getMetaData().getColumnName(x)查看列名(将x替换为列数)。

所以从技术上讲,您应该能够像这样编写代码块:

result = Pstatement.executeQuery("Select usersList() ");
String mesites[];
while(result.next()) {
    int columnCount = result.getMetaData().getColumnCount();
    System.out.println("Found:"+columnCount+" columns.");
    for(int i=1; i<=columnCount; i++){
        System.out.println(result.getString(result.getMetaData().getColumnName(i)));
    }
}

然后应该打印出在该结果集中检索到的任何列,无论名称如何(如果有的话)。

【讨论】:

  • 找到:1 列。 ("at1",name1,surname1) 找到:1 列。 (“123456”,乔治,gtest)。 . .
【解决方案2】:

Postgres plpgsql 函数:

CREATE OR REPLACE FUNCTION usersList()
RETURNS TABLE(at varchar,name varchar,surname varchar)  AS $$
    BEGIN
        RETURN QUERY SELECT * FROM users;
    END;
$$ LANGUAGE plpgsql;

还有java代码

result = Pstatement.executeQuery("SELECT * FROM usersList() ");
while(result.next()) {
    System.out.println(result.getString(("at")));
    System.out.println(result.getString(("name")));
    System.out.println(result.getString(("surname")));
}

感谢 RealSkeptic && Nick Barnes !!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2016-07-17
    相关资源
    最近更新 更多