2017-04-25 3 views
0

Verwenden von Sql Workbench/J Ich möchte eine CSV-Datei in eine Virtuoso-Tabelle laden. Ich bekomme eine NullPointerException, wenn in der Datei ein numerisches Feld leer ist. Die Zieltabelle enthält eine Nullwert-Spalte für die leeren Felder. Der Fehler ist der folgende.Import mit Sql Workbench/J in Virtuoso eine CSV-Datei mit leeren numerischen Feldern

java.lang.NullPointerException 
java.lang.NullPointerException 
     at virtuoso.jdbc4.VirtuosoPreparedStatement.setObject(VirtuosoPreparedStatement.java:846) 
     at virtuoso.jdbc4.VirtuosoPreparedStatement.setObject(VirtuosoPreparedStatement.java:789) 
     at virtuoso.jdbc4.VirtuosoPreparedStatement.setObject(VirtuosoPreparedStatement.java:773) 
     at workbench.db.compare.BatchedStatement.setObject(BatchedStatement.java:120) 
     at workbench.db.importer.DataImporter.processRowData(DataImporter.java:1368) 
     at workbench.db.importer.DataImporter.insertRow(DataImporter.java:1297) 
     at workbench.db.importer.DataImporter.processRow(DataImporter.java:1054) 
     at workbench.db.importer.TextFileParser.processOneFile(TextFileParser.java:743) 
     at workbench.db.importer.AbstractImportFileParser.start(AbstractImportFileParser.java:390) 
     at workbench.db.importer.DataImporter.startImport(DataImporter.java:761) 
     at workbench.sql.wbcommands.WbImport.execute(WbImport.java:827) 
     at workbench.sql.StatementRunner.runStatement(StatementRunner.java:582) 
     at workbench.sql.BatchRunner.executeScript(BatchRunner.java:877) 
     at workbench.sql.BatchRunner.executeScript(BatchRunner.java:784) 
     at workbench.sql.BatchRunner.runFiles(BatchRunner.java:642) 
     at workbench.sql.BatchRunner.execute(BatchRunner.java:596) 
     at workbench.WbManager.runBatch(WbManager.java:1075) 
     at workbench.WbManager.startApplication(WbManager.java:929) 
     at workbench.WbManager.main(WbManager.java:1227) 
     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 workbench.WbStarter.main(WbStarter.java:143) 
Importing file 'C:\dev\csvFiles\CLASSIFICATION_CODE.csv' into table CLASSIFICATION_CODE 
The file "C:\dev\csvFiles\CLASSIFICATION_CODE.csv" was not imported 

Meine Tabelle hat die folgende Struktur.

Die Datei, die ich hochladen möchte, hat den folgenden Inhalt (das letzte Feld ist leer).

CLASSIFICATION_CODE_ID,CLASSIFICATION_CATEGORY,CLASSIFICATION_PRIORITY 
1,^3^, 
2,^2^, 
3,^2^, 
4,^2^, 
5,^2^, 
6,^3^, 

Schließlich ist dies der WbImport Befehl, den ich es importieren verwenden.

WbImport -type=text 
-file='C:\dev\csvFiles\CLASSIFICATION_CODE.csv' 
-delimiter=, 
-table=DB.PEST.CLASSIFICATION_CODE 
-quoteChar=^ 
-badfile='C:\dev\csvFiles\rejected' 
-emptyStringIsNull=false; 

Ich sehe kein Parameter zu SQL Workbench/J zu sagen, dass das Feld für die Spalte CLASSIFICATION_PRIORITY null sein kann. Fehle ich etwas?

ich

bin mit
  • Virtuoso Open Source Edition Version 7.2.4.3217-Themen ab 25. April 2016 Zusammengestellt für Win64 (x86_64-generic-win-64)

  • die gepatchte Virtuoso JDBC Treiber virtjdbc4_2.jar für jdk1.8 befindet sich this link.

+0

Sie haben keine Versionsinformationen zur Verfügung gestellt, also frage ich mich, ob alle Komponenten auf dem neuesten Stand sind? Ich würde Java, den JDBC-Treiber für Virtuoso und SQL Workbench/J überprüfen; möglicherweise lohnt es sich auch, Virtuoso selbst zu überprüfen, dachte, es sei nicht in den gemeldeten Fehler verwickelt. – TallTed

+0

@TallTed Ich habe den Verweis auf den JDBC-Treiber hinzugefügt. Eigentlich habe ich den von Sergey vor 4 Wochen gepatcht. Vielleicht ist es jetzt auch im Repository verfügbar, ich bin mir nicht sicher. – Bepi

+0

OK, Virtuoso ist das neueste stabile VOS-Release für Windows, und ich nehme an, Sie verwenden Java 8 (vermutlich das Neueste und Größte). Was ist mit * SQL Workbench/J *, was * kann * der Schuldige hier sein? Zuletzt haben Sie wahrscheinlich direkt mit Sergey zusammengearbeitet, um den JDBC-Treiber vor der Veröffentlichung zu erhalten. Es lohnt sich wahrscheinlich, dasselbe über dieses Thema zu tun! – TallTed

Antwort

0

Der Fehler wird durch einen Fehler im Treiber verursacht virtjdbc4_2.jar Die aktuelle Version des Treibers auf dem gleichen Link behebt das Problem.

Der Treiber befindet sich auch im Repository Virtuoso github.

Verwandte Themen