[ https://issues.apache.org/jira/browse/DERBY-2193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12488769 ]
Aaron Digulla commented on DERBY-2193: -------------------------------------- Thanks, that looks much better. Here are a few more cases which can cause problems: - No newline at the end of the file - When you have a table with N columns and an INT column at the end and the import file has N+1 columns, the import tries to assign the last two columns to the INT column - If you have illegal characters in INT columns (like "a" or ".") In all these cases, you'll only get an error that a column couldn't be parsed but not *which* column. Can you add the column number or name to the error message, too? Or should I open a new JIRA for this? If you want that in a new JIRA, then this one can be closed. > [import] ERROR 38000: StringIndexOutOfBoundsException was thrown while > evaluating an expression. > ------------------------------------------------------------------------------------------------ > > Key: DERBY-2193 > URL: https://issues.apache.org/jira/browse/DERBY-2193 > Project: Derby > Issue Type: Bug > Components: Tools > Affects Versions: 10.2.1.6 > Reporter: Aaron Digulla > Attachments: derby-2193-01.diff, derby-2193-02-rev2.diff, > derby-2193-02.diff, derby-2193-script.jar > > > During import of a file, I get this error: > ERROR 38000: The exception 'java.sql.SQLException: Java exception: > 'java.lang.StringIndexOutOfBoundsException: String index out of range: -14'.' > was thrown while evaluating an expression. > at org.apache.derby.iapi.error.StandardException.newException(Unknown > Source) > at > org.apache.derby.iapi.error.StandardException.unexpectedUserException(Unknown > Source) > at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(Unknown > Source) > at > org.apache.derby.impl.sql.execute.CallStatementResultSet.open(Unknown Source) > at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown > Source) > ... > How am I supposed to find what's wrong in a big import? :-) It should at > least mention the file which I was importing, the row and the column when the > error occurred. > After printing the whole exceptions chain, I got these additional two: > ERROR XJ001: Java exception: 'java.lang.StringIndexOutOfBoundsException: > String index out of range: -14'. > at org.apache.derby.iapi.error.StandardException.newException(Unknown > Source) > at > org.apache.derby.iapi.error.StandardException.plainWrapException(Unknown > Source) > at org.apache.derby.impl.load.LoadError.unexpectedError(Unknown Source) > at org.apache.derby.impl.load.ImportAbstract.next(Unknown Source) > at > org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(Unknown Source) > at > org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(Unknown > Source) > at > org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(Unknown > Source) > at > org.apache.derby.impl.sql.execute.NoPutResultSetImpl.getNextRowFromRowSource(Unknown > Source) > at org.apache.derby.impl.store.access.heap.HeapController.load(Unknown > Source) > at org.apache.derby.impl.store.access.heap.Heap.load(Unknown Source) > at > org.apache.derby.impl.store.access.RAMTransaction.loadConglomerate(Unknown > Source) > at > org.apache.derby.impl.store.access.RAMTransaction.recreateAndLoadConglomerate(Unknown > Source) > at > org.apache.derby.impl.store.access.RAMTransaction.createAndLoadConglomerate(Unknown > Source) > at > org.apache.derby.impl.sql.execute.InsertResultSet.bulkInsertCore(Unknown > Source) > at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown > Source) > at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown > Source) > at org.apache.derby.impl.load.Import.performImport(Unknown Source) > at org.apache.derby.impl.load.Import.importData(Unknown Source) > at org.apache.derby.catalog.SystemProcedures.SYSCS_IMPORT_DATA(Unknown > Source) > at > org.apache.derby.exe.ac07170079x010fx9622xb7bax00000011a6e80.g0(Unknown > Source) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(Unknown > Source) > at > org.apache.derby.impl.sql.execute.CallStatementResultSet.open(Unknown Source) > at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown > Source) > ... > java.lang.StringIndexOutOfBoundsException: String index out of range: -14 > at java.lang.String.<init>(String.java:202) > at > org.apache.derby.impl.load.ImportReadData.readNextDelimitedRow(Unknown Source) > at org.apache.derby.impl.load.ImportReadData.readNextRow(Unknown Source) > at org.apache.derby.impl.load.ImportAbstract.next(Unknown Source) > at > org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(Unknown Source) > at > org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(Unknown > Source) > at > org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(Unknown > Source) > at > org.apache.derby.impl.sql.execute.NoPutResultSetImpl.getNextRowFromRowSource(Unknown > Source) > at org.apache.derby.impl.store.access.heap.HeapController.load(Unknown > Source) > at org.apache.derby.impl.store.access.heap.Heap.load(Unknown Source) > at > org.apache.derby.impl.store.access.RAMTransaction.loadConglomerate(Unknown > Source) > at > org.apache.derby.impl.store.access.RAMTransaction.recreateAndLoadConglomerate(Unknown > Source) > at > org.apache.derby.impl.store.access.RAMTransaction.createAndLoadConglomerate(Unknown > Source) > at > org.apache.derby.impl.sql.execute.InsertResultSet.bulkInsertCore(Unknown > Source) > at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown > Source) > at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown > Source) > at org.apache.derby.impl.load.Import.performImport(Unknown Source) > at org.apache.derby.impl.load.Import.importData(Unknown Source) > at org.apache.derby.catalog.SystemProcedures.SYSCS_IMPORT_DATA(Unknown > Source) > ... -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.