[ 
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.

Reply via email to