Java 如何在ResultSet JayBird中获取字符串(Table.Column)
我需要使用Firebird数据库,为此我使用了Jaybird 2.2.9 当我使用MySQL驱动程序时,通过以下方式将Java 如何在ResultSet JayBird中获取字符串(Table.Column),java,jdbc,firebird,resultset,jaybird,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
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;
}
}
jdbc中的名称将不包含该表 你也可以
- 使用位置参数(
等等)getString(1);
- 在select中定义列名别名(
)select a.name from a from a from tableone a
- 只需执行rs.getString(“列”);如果名称明确,则不使用表前缀
- 使用位置参数(
等等)getString(1);
- 在select中定义列名别名(
)select a.name from a from a from tableone a
- 只需执行rs.getString(“列”);如果名称明确,则不使用表前缀
- 你不能。Jaybird按照JDBC 4.2第15.2.3节中指定的标签检索列。在Firebird中,列标签要么是原始列名,要么是AS别名,表名不在其中。可以在表名前面加前缀以消除歧义的MySQL扩展是非标准的
您可以选择在查询中指定别名并按此别名名称检索,或者处理结果集元数据以查找每列的正确索引,然后改为按索引检索
但是请注意,在某些查询(例如
UNION
)中,ResultSetMetaData.getTableName
无法返回表名,因为Firebird不“知道”该表名(因为您可以将UNION应用于不同表中的选择)。您不能。Jaybird按照JDBC 4.2第15.2.3节中指定的标签检索列。在Firebird中,列标签要么是原始列名,要么是AS别名,表名不在其中。可以在表名前面加前缀以消除歧义的MySQL扩展是非标准的
您可以选择在查询中指定别名并按此别名名称检索,或者处理结果集元数据以查找每列的正确索引,然后改为按索引检索
但是请注意,在某些查询(例如
UNION
)中,ResultSetMetaData.getTableName
无法返回表名,因为Firebird不“知道”表名(因为您可能正在将UNION应用于不同表中的选择)。我使用了您的第二个建议。但我认为这种方法非常有效,我需要的所有sql都使用alias,因为我有一个表到对象的转换器。作为mysql驱动程序,没有其他方法吗?如果你的表有很多相同的列名,我想你必须走这条艰难的道路。我使用了你的第二个建议。但我认为这种方法非常有效,我需要的所有sql都使用alias,因为我有一个表到对象的转换器。没有其他方式作为mysql驱动程序吗?如果你的表有很多相同的列名,我认为你必须走这条艰难的道路。你有resultset到object mapper的代码吗?您将不会有两个同名的对象字段?如果我使用rs.getString(“Table.Column”)作为mysql驱动程序,我永远不会有两个同名的对象字段。您是如何将table1.col和table2.col映射到对象中的?如果你展示部分代码,我们可以想出更好的方法。顺便说一句:我认识的大多数对象相关映射程序都是用我上面的完整转换器来实现的;等等您是否有resultset到对象映射器的代码?您将不会有两个同名的对象字段?如果我使用rs.getString(“Table.Column”)作为mysql驱动程序,我永远不会有两个同名的对象字段。您是如何将table1.col和table2.col映射到对象中的?如果你展示部分代码,我们可以想出更好的方法。顺便说一句:我认识的大多数对象相关映射程序都是用我上面的完整转换器来实现的;等等我理解,但这个解决方案促进了我的mysql驱动程序的使用。使用JayBird,我将在sql中使用别名。如果你能在JayBird中实现这个解决方案,我想这对很多程序员都有帮助,比如I.Tanks@MarkRotteveel@TiagoRoquedeCarvalho如果你在跟踪器中创建一个改进请求,那么我会考虑它(虽然没有承诺,还有更多的事情要做,而且我的时间有限,我不确定我喜欢添加非标准特征的想法)。。我将创建一个改进请求,感谢您的帮助。我理解,但此解决方案促进了我的live with mysql驱动程序。使用JayBird,我将在sql中使用别名。如果你能在JayBird中实现这个解决方案,我想这对很多程序员都有帮助,比如I.Tanks@MarkRotteveel@TiagoRoquedeCarvalho如果你在跟踪器中创建一个改进请求,那么我会考虑它(虽然没有承诺,还有更多的事情要做,而且我的时间有限,我不确定我喜欢添加非标准特征的想法)。。我将创建一个改进请求,感谢您的帮助。