Получить целую строку с помощью jdbc в виде списка

Мне нужно получить данные из нескольких таблиц и экспортировать в лист excel для каждой таблицы. Я не хочу использовать метод getXXX() поскольку имеется большое количество столбцов, и я не знаю тип данных для каждого столбца. Мне нужно получить целую строку и сохранить результат в списке. Я getObject() каждый столбец, используя getObject() а также тип класса, используя MetaData.getColumnClassName() .

Например

 Object val = resultSet.getObject(i); 

Я пытаюсь использовать этот val для его фактического типа, используя getColumnClassName() но при этом он дает мне ошибку при кастинге.

Кто-нибудь может мне помочь, пожалуйста.

public class Row {

 public Map<Object, Class> row; public static Map<String, Class> TYPE; static { TYPE = new HashMap<String, Class>(); TYPE.put("INTEGER", Integer.class); TYPE.put("NUMERIC", BigDecimal.class); TYPE.put("DOUBLE", Double.class); TYPE.put("VARCHAR2", String.class); } public Row() { row = new HashMap<Object, Class>(); } public <t> void add(t data) { row.put(data, data.getClass()); } public void add(Object data, String sqlType) { add((Row.TYPE.get(sqlType)) data); } public static void formTable(ResultSet rs, List<Row> table) throws SQLException { if(rs == null) return; ResultSetMetaData rsmd = rs.getMetaData(); int colCt = rsmd.getColumnCount(); while(rs.next()) { Row row = new Row(); for(int i = 0; i < colCt; i++) { row.add(rs.getObject(i), rsmd.getColumnTypeName(i)); } table.add(row); } } public static void main(String[] args) { } 

}

Попробуйте этот код:

 Connection connection = DriverManager.getConnection("URL", "USERNAME", "PASSWORD"); PreparedStatement statement = connection.prepareStatement("select * from table"); ResultSet resultSet = statement.executeQuery(); if (resultSet != null) { while (resultSet.next()) { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { int type = resultSetMetaData.getColumnType(i); if (type == Types.VARCHAR || type == Types.CHAR) { System.out.println(resultSet.getString(i)); } else { System.out.println(resultSet.getLong(i)); } } System.out.println("-----------"); } } 

Вы должны расширить его с помощью других типов данных.

Шаг 1 : получить метаданные

 ResultSetMetaData rsmd; rsmd = rs.getMetaData(); int numColumns = rsmd.getColumnCount(); int[] columnsType = new int[numColumns + 1]; columnsType[0] = 0; for (int i = 1; i <= numColumns; i++) columnsType[i] = rsmd.getColumnType(i); 

Шаг 2 : выборка строки из набора результатов и проверка типа данных

 String s; Object o; while (rs.next()) { for (int i = 1; i <= numColumns; i++) { if (columnsType[i] == java.sql.Types.NUMERIC || columnsType[i] == java.sql.Types.CHAR || columnsType[i] == java.sql.Types.VARCHAR) { s = rs.getString(i); } else if (columnsType[i] == java.sql.Types.NVARCHAR) { s = rs.getNString(i); } else if (columnsType[i] == java.sql.Types.BOOLEAN) { // TODO } else if (columnsType[i] == java.sql.Types.FLOAT || columnsType[i] == java.sql.Types.DOUBLE) { // TODO } else if (columnsType[i] == java.sql.Types.TINYINT || columnsType[i] == java.sql.Types.SMALLINT || columnsType[i] == java.sql.Types.INTEGER || columnsType[i] == java.sql.Types.BIGINT) { // TODO } else if (columnsType[i] == java.sql.Types.DATE || columnsType[i] == java.sql.Types.TIMESTAMP) { // TODO } else { o = rs.getObject(i); } } } 

Шаг 3 : заполните пробелы и добавьте обработку исключений

Шаг 4 : напишите в Excel (внутри цикла)

 public class EXECUTEQUERY implements Module { private static final DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private String userId; String result = ""; String resp = ""; static int count = 1; private final Logger log = Logger.getLogger("EXECUTEQUERY"); private void dbg(String msg) { log.info(userId + ":" + msg); } private void dbg(Exception ex) { log.info(ex.getMessage()); ex.printStackTrace(); } private void uDbg(String msg) { log.info(userId + " :" + msg); } private void uDbg(Exception ex) { uDbg(ex.getMessage()); ex.printStackTrace(); } public String main(UserContext userContext, String reqXml) { dbg("Query recieved is " + reqXml); String resp; userId = userContext.getUserId(); if (userContext.getAction().equals("EXECUTEQUERY")) { if (reqXml == null || reqXml.equals("")) { result = "!Please Enter the query"; } else { result = getQueryResult(userContext, reqXml); } } return result; } /*** * * for adding search record in backend created by @shyamlal yadav * @param userContext * @param reqXml */ public void addQueryLog(UserContext userContext, String reqXml) { dbg("inside addQueryLog methos request is " + reqXml); userId = userContext.getUserId(); dbg( userId +"this user is selecting value from screen"); System.out.println("recieve request is " + reqXml); PreparedStatement pStmt = null; Connection eodConn = null; dbg("addQueryLog recieved for log " + reqXml); Date date = new Date(); java.sql.Date sqlDate = new java.sql.Date( date.getTime()); eodConn = EODConnectionFactory.getInstance().getFCConnectionFromPool(); try { pStmt = eodConn.prepareStatement("insert into EOD_QRY_EXEC_LOG (QRY_EXEC_TIMESTAMP, QRY_TEXT,OPERATOR_ID)\n" + " values (?,?,?)"); pStmt.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis())); pStmt.setString(2, reqXml); pStmt.setString(3, userId); pStmt.executeQuery(); } catch (SQLException ex) { dbg("Exception is " + ex); return; } EODConnectionFactory.returnFCConnectionToPool(eodConn); return; } /* This method returns query excecuted table data with separators. @Shaymlal, */ public String getQueryResult(UserContext userContext, String reqXml) { String field_value = ""; String lsitofquery = ""; String resultlist = ""; dbg("Inside getQueryResult method"); Connection eodConn = null; Statement stmt = null; eodConn = EODConnectionFactory.getInstance().getFCConnectionFromPool(); try { stmt = eodConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(reqXml); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); dbg("Total no of column is:" + columnCount); int rsCount = 1; while (rs.next()) { if (rsCount == 1) { for (int i = 1; i <= columnCount; i++) { resultlist += "~" + rsmd.getColumnName(i); } } for (int i = 1; i <= columnCount; i++) { field_value += "~" + rs.getString(i); } field_value = field_value + "~<>"; lsitofquery = resultlist + "~>" + field_value; rsCount = rsCount + 1; } } catch (Exception ex) { dbg("Exception is " + ex); return "!Exception invalid query: " + ex; } EODConnectionFactory.returnFCConnectionToPool(eodConn); // return rowCount > 0 ? lsitofquery+">" : "!Table is Empty" ; addQueryLog(userContext,reqXml); return lsitofquery + ">"; } } 
  • Обновление кредитного портфеля путем согласования дат прекращения кредитования и количества сотрудников
  • запрос строк mysql с php
  • Как периодически экспортировать данные Excel на SQL-сервер
  • Группа Microsoft Query / Partition By
  • Импортировать выбранные столбцы в Excel из таблицы доступа с помощью VBA
  • В Excel, как создать несколько строк из одной строки данных
  • Количество записей в формате SQL VBA ADODB
  • Сравнение или сопоставление значений в таблице оракула с данными в документе excel
  • SQL-запрос для копирования данных таблицы в файл Excel
  • Как получить данные подписки в транзакционные данные в Таблице?
  • ssis добавить столбец со значением по умолчанию, если нет в исходном файле
  • Interesting Posts

    EXCEL VBA, Изменяет группы ячеек и событие Worksheet_Change

    python pandas dataframe concat и группа по функциям

    Axapta V3 – как получить доступ к свойствам workheet.pagesetup из x ++

    отличная сводная таблица фильтров VBA с гибкими именами

    Фильтр для слова из строки в excel

    MS Excel VBA, передавая переменную от sub к форме

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

    Как удалить условные форматы для ячейки или диапазона с помощью EPPlus

    поиск вверх и отображение нескольких записей данных с несколькими столбцами в списке VBA

    adminLTE и VBscripts?

    Как сделать оператор IF в одной ячейке на нескольких листах, а затем отобразить сумму истинных значений на другом листе?

    VBA – объединение данных из разных форматов хранения книг

    Импорт из Excel через цикл foreach

    При вставке строки автопопуляцией формулы в ячейке

    Excel Macro, который считывает количество строк в другой таблице и заполняет формулы

    Давайте будем гением компьютера.