2015-12-29 2 views
0

Мне нужно использовать базу данных Firebird, и для этого я использую Jaybird 2.2.9.Как getString (Table.Column) в ResultSet JayBird

Когда я использовал драйвер 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; 
    } 
} 
+0

У вас есть код для результатов на объект mapper? У вас не будет двух полей объектов с таким же именем? – Jan

+0

Если я использую rs.getString («Table.Column») как драйвер mysql, у меня никогда не было двух полей объектов с тем же именем. –

+0

И как вы связали table1.col и table2.col в объекте? Если вы указали часть своего кода, мы могли бы подумать о лучшем способе. Кстати: большинство объектно-релятонных картографов, которых я знаю, делают это witj aliases – Jan

ответ

2

Вы не можете. Jaybird извлекает столбцы своей меткой, как указано в JDBC 4.2, раздел 15.2.3. В Firebird метка столбца является либо исходным именем столбца, либо псевдонимом AS, имя таблицы не является частью этого. Расширение MySQL, которое вы можете префикс имени таблицы для устранения неоднозначности, является нестандартным.

Ваши варианты - указать псевдонимы в запросе и получить это псевдоним или обработать метаданные набора результатов, чтобы найти нужные индексы для каждого столбца и получить вместо этого индекс.

Однако обратите внимание, что в некоторых запросах (например, UNION) ResultSetMetaData.getTableName не может вернуть имя таблицы, поскольку Firebird не «знает» его (поскольку вы можете применять UNION для выбора из разных таблиц).

+0

Я понял, но это решение помогло мне жить с драйвером mysql. С JayBird я буду использовать псевдоним в своем sql. Если вы можете реализовать это решение в JayBird, я думаю, что это помогает многим программистам как я. Танки @Mark Rotteveel –

+0

@TiagoRoquedeCarvalho Если вы создадите запрос на улучшение в трекере по адресу http://tracker.firebirdsql.org/browse/JDBC, тогда Я буду считать это (никаких обещаний, однако, есть больше, и мое время ограничено, и я не уверен, что мне нравится идея добавления нестандартных функций). –

+0

Я создам запрос на улучшение, спасибо за вашу помощь. –

2

Имя в JDBC не будет иметь таблицу в нем.

Вы можете

  • работа с позиционными параметрами (getString (1); и так далее)

Или

  • определить имя столбца псевдоним в вашем выберите (select a.name namefroma from tableone a)

или

  • просто выполните rs.getString ("column"); без префикса таблицы, если имя однозначно
+0

Я использовал ваше второе предложение. Но я думаю, что этот способ очень полезен, все sql мне нужно использовать псевдоним, потому что у меня есть один конвертер для таблицы для объекта. У вас нет другого способа использования драйвера mysql? –

+0

Если у вас в таблицах много имен столбцов, я думаю, вам нужно идти по этой трудной дороге. – Jan

 Смежные вопросы

  • Нет связанных вопросов^_^