如何在ResultSet JayBird中获取getString(Table.Column)

时间:2015-12-29 17:03:34

标签: java jdbc firebird resultset jaybird

我需要使用数据库Firebird,为此我使用Jaybird 2.2.9。

当我使用MySQL驱动程序时,以这种方式将ResultSet转换为Object

empresa.setBairro(rs.getString("empresa.bairro")); // (Table.Column)
empresa.setCep(rs.getString("empresa.cep")); // (Table.Column)
empresa.setCidade(rs.getString("empresa.cidade")); // (Table.Column)

但是对于Jaybird,resultSet不会返回rs.getString("Table.Column")

当我在SQL进行内部联接时,我需要这种方式。

有人帮助我吗?

这是我的完整代码

public ContaLivros converterContaLivros(ResultSet rs, Integer linha) throws Exception {
    if (rs.first()) {

        rs.absolute(linha);

        ContaLivros obj = new ContaLivros();

        obj.setId(rs.getLong("cad_conta.auto_id"));
        obj.setNome(rs.getString("cad_conta.nome"));


        if (contain("cad_banco.auto_id", rs)) {

            obj.setBancoLivros(converterBancoLivros(rs, linha));
        } else {

            obj.setBancoLivros(new BancoLivros(rs.getLong("cad_conta.banco"), null, null, null));
        }
        obj.setAgencia(rs.getInt("cad_conta.agencia"));
        obj.setAgenciaDigito(rs.getInt("cad_conta.agencia_digito"));
        obj.setConta(rs.getInt("cad_conta.conta"));
        obj.setContaDigito(rs.getInt("cad_conta.conta_digito"));
        obj.setLimite(rs.getDouble("cad_conta.limite"));
        obj.setAtivo(rs.getString("cad_conta.ativo"));

        return obj;
    } else {
        return null;
    }
}

2 个答案:

答案 0 :(得分:2)

jdbc中的名称不包含该表。

你可以

  • 使用位置参数(getString (1);等)

或者

  • 在您的选择(select a.name namefroma from tableone a
  • 中定义列名称别名

或者

  • 只需执行rs.getString(" column");如果名称不明显,则不带表格前缀

答案 1 :(得分:2)

你不能。 Jaybird按照JDBC 4.2第15.2.3节中的规定检索列。在Firebird中,列标签是原始列名称或AS别名,表名称不是其中的一部分。可以在表名前加上消除歧义的MySQL扩展名是非标准的。

您的选择是在查询中指定别名并通过此别名检索,或者处理结果集元数据以查找每列的正确索引并通过索引检索。

但是请注意,在某些查询中(例如UNION),ResultSetMetaData.getTableName无法返回表名,因为Firebird没有"知道"它(因为您可以应用UNION从不同的表中进行选择)。