History-Research-Environment / HRE--History-Research-Environment

Main repo for HRE code
https://historyresearchenvironment.org/
GNU Affero General Public License v3.0
32 stars 6 forks source link

HREDBADMIN CSV Export Error #15

Closed MichaelErichsen closed 4 years ago

MichaelErichsen commented 6 years ago

Exporting a table with a CLOB complains that a String cannot be cast to a CLOB. Occurs in H2TableLNavigator Surfaces in table DIGITALS

MichaelErichsen commented 6 years ago

Stack trace:

java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Clob at org.historyresearchenvironment.databaseadmin.parts.H2TableNavigator.exportCsv(H2TableNavigator.java:246) at org.historyresearchenvironment.databaseadmin.parts.H2TableNavigator.exportTable(H2TableNavigator.java:279) at org.historyresearchenvironment.databaseadmin.parts.H2TableNavigator.access$2(H2TableNavigator.java:269) at org.historyresearchenvironment.databaseadmin.parts.H2TableNavigator$3.widgetSelected(H2TableNavigator.java:155) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:249) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4428) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4238) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3817) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153) at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:162) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590) at org.eclipse.equinox.launcher.Main.run(Main.java:1499) at org.eclipse.equinox.launcher.Main.main(Main.java:1472)

MichaelErichsen commented 6 years ago

Code:

        final H2TableProvider provider = new H2TableProvider(tableName);
        final List<H2TableModel> modelList = provider.getModelList();
        final List<List<Object>> rows = provider.selectAll();

        final SimpleResultSet rs = new SimpleResultSet();

        for (int i = 0; i < provider.getCount(); i++) {
            switch (modelList.get(i).getNumericType()) {
            case HreConstants.DOUBLE:
            case HreConstants.VARBINARY:
            case HreConstants.SMALLINT:
            case HreConstants.INTEGER:
            case HreConstants.BIGINT:
                rs.addColumn(modelList.get(i).getName(), modelList.get(i).getNumericType(),
                        modelList.get(i).getPrecision(), modelList.get(i).getScale());
                break;
            case HreConstants.VARCHAR:
                rs.addColumn(modelList.get(i).getName(), modelList.get(i).getNumericType(), 0,
                        modelList.get(i).getScale());
                break;
            default:
                rs.addColumn(modelList.get(i).getName(), modelList.get(i).getNumericType(), 0, 0);
                break;
            }
        }

        Object[] oa;

        for (int i = 0; i < rows.size(); i++) {
            oa = new Object[provider.getCount()];
            for (int j = 0; j < oa.length; j++) {
                LOGGER.info("Column " + i + ", column " + j + ", type " + modelList.get(j).getType() + ", value "
                        + rows.get(i).get(j));
                if (modelList.get(j).getType().equals("CLOB")) {
                    oa[j] = (Clob) rows.get(i).get(j);
                } else
                    oa[j] = rows.get(i).get(j);
            }

            rs.addRow(oa);
        }

        final Csv csvFile = new Csv();
        csvFile.setFieldSeparatorWrite(",");

        csvFile.write(fileName, rs, "UTF-8");
HREferg commented 4 years ago

Closed - no longer relevant to current Build of HRE