2015-08-07 4 views
2

Я пытаюсь преобразовать набор CSV-файлов в базу данных HSQLDB. Моя первая попытка была запустить DatabaseManagerSwing и выполнить следующий код:Импорт CSV-файлов в HSQLDB

* *DSV_COL_SPLITTER = ; 
\mq /home/michael/workspaces/rds-surveyor/lt/it/NAMES.DAT 
commit; 

Что отвергается с сообщением об ошибке:

java.sql.SQLSyntaxErrorException: unexpected token: * 

Для того, чтобы получить хоть какой-то ответ от HSQLDB, я попытался удалить первая линия, но это дает лишь немного другую ошибку:

java.sql.SQLSyntaxErrorException: unexpected token: 

затем я наткнулся на sqltool, и после преодоления его различных ловушек (вам н eed sqltool JAR, а также hsqldb JAR той же версии в том же пути или где-то в вашем пути к классам). Я запустил полный код здесь. Первая линия получила обработана, как и ожидались, но команда \mq терпит неудачу с подобной ошибкой:

SEVERE Cause: SQLSyntaxErrorException: unknown token: 

файлом Я пытаюсь импорт выглядит следующим образом (первые несколько строк показаны):

CID;LID;NID;NAME;NCOMMENT 
25;1;165;Europa; 
25;1;167;Italia; 
25;1;169;Abruzzo; 
25;1;171;Chieti; 
25;1;173;Passo Di Lanciano; 
25;1;175;Valico Castiglione Messer Marino; 
25;1;177;Valico Della Forchetta; 

Что здесь не так?

ответ

0

Я теперь отказался от пути импорта по другим причинам, и вместо этого я делаю импорт CSV в своем приложении.

При работе с операторами CREATE TABLE, которые я создал из первой строки файла CSV, я получил то же сообщение об ошибке для моего кода SQL. Более подробный анализ файла SQL с шестнадцатеричным редактором показал маркер байтового байта (BOM) в начале имени вставленного столбца. После устранения спецификации, код SQL будет работать без каких-либо дополнительных ворчаний.

Я помню, что некоторые из файлов, которые я пытаюсь импортировать, начинаются с спецификации (что раньше давало мне головную боль), поэтому я предполагаю, что спецификация была «неизвестным маркером». HSQLDB жаловался все время. Поскольку спецификация является непечатаемым символом, это объясняет, почему в сообщении об ошибке не показывался токен.

Извлеченный урок: ошибка «недействительного токена» без символа, показанного в сообщении, скорее всего, связана с спецификацией, управляющим символом или другим непечатаемым материалом в оскорбительном вводе. Это будет показано в шестнадцатеричном редакторе.

1

Команда, которую вы пытаетесь выполнить, принадлежит SqlTool, который является отдельным клиентом командной строки для HSQLDB и находится в отдельной банке в почтовом пакете. Руководство пользователя находится здесь: http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html

В DatabaseManagerSwing вы можете использовать другой способ создания таблиц TEXT для файлов CSV. http://hsqldb.org/doc/2.0/guide/texttables-chapt.html

+0

Спасибо, я понял, что '* * DSV_COL_SPLITTER =;' материал требует 'sqltool' и соответствующим образом отредактировал мой вопрос. Я также читал о таблицах TEXT, но это не то, что я хочу - таблица TEXT будет ссылаться на файл CSV для хранения, а я хочу * импортировать * данные в БД и вырезать файлы CSV. – user149408

+1

После того, как вы создали текстовую таблицу, вы можете скопировать данные в другую таблицу базы данных и освободить CSV. – fredt

+0

Ах, не подумал об этом. Упрек, так как это помогло бы, если бы не тот факт, что я выбрал другой путь. Спасибо, в любом случае! – user149408