Как перевести имена столбцов в переменные в программе Java? - PullRequest
0 голосов
/ 15 августа 2011

Предположим, у вас есть тысячи строк данных из таблицы

    Index      | First_name       |    Last_name 
=====================================================
    1          |  John            |     Doe
    2          |  Jane            |     Doe

Задача состоит в том, чтобы представить каждую отдельную строку этой таблицы в некотором компоненте. Например, было бы неплохо иметь

private int index;
private String firstName
private String lastName

К сожалению количество столбцов и имена столбцов неизвестны и бины не могут быть созданы до сбора данных

Поэтому я не могу жестко назвать имя переменной, чтобы ожидать firstName. Я не знаю, сколько переменных мне нужно, и тип этих переменных.

Есть ли способ, которым я могу представить строку в таблице как часть компонента, где имена переменных совпадают с именами столбцов?

Идея в том, что мне в конечном итоге придется сравнить 'n' этих бобов и я хотел бы разумно сообщить о различиях

Полагаю, у меня может быть

Set<String> columnNames
List<Object> columnData

А затем сопоставить по индексу, но есть ли более чистый способ?

Ответы [ 4 ]

3 голосов
/ 15 августа 2011

Я думаю, что лучшим способом представления ваших данных было бы Map<String, Object> для каждой строки вместо пользовательского класса Бина, который вы должны были бы создать вначале ... и который вы не сможете использовать впоследствии, не зная какие свойства (например, получить / установить пары) он имеет.

Reflection не может создавать классы (или интерфейсы), хотя вы можете использовать некоторую библиотеку манипулирования байт-кодом или сгенерировать исходный код Java и передать его компилятору. (Но все же, как бы вы потом использовали класс? Все еще только с отражением.)

1 голос
/ 15 августа 2011

Если вы используете JDBC, вы можете использовать ResultSet.getMetaData () , чтобы получить дополнительную информацию о столбцах, возвращаемых в вашем наборе результатов, их именах и их типах.

0 голосов
/ 15 августа 2011

Это должно помочь вам начать чтение имен и типов столбцов (предположим, что соединение java.sql.Connection):

    DatabaseMetaData metadata = connection.getMetaData();
    ResultSet rsColumns = metadata.getColumns(null, null, "tablename", null);
    while (rsColumns.next()) 
    {
      String columnName = rsColumns.getString("COLUMN_NAME");
      String columnType = rsColumns.getString("TYPE_NAME");

      // Do your magic

    }
0 голосов
/ 15 августа 2011

Ну, теоретически вы можете использовать библиотеку манипулирования байт-кодом (например, BCEL: http://bcel.sourceforge.net/), чтобы создавать классы на лету, а затем загружать их в вашу JVM.

Однако это вряд ли стоит усилий. Возможно, вам следует спросить себя, почему столбцы базы данных должны быть полями в классе Java. Что вы планируете с ними делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...