Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 h2 не принимает команды  [new]
pycha
Member

Откуда:
Сообщений: 11
Приветствую. Предыстория в этой теме.
Есть прога на java, и есть файл с командами sql. Нужно обработать файл и вытянуть нужные данные.
Я выбрал бд, которая использует оперативку и ее можно можно присоединить к проэкту - Н2. Полетели ошибки, гугл мне не дал четкого понимания что не так. Догадываюсь что Н2 не поддерживает такой синтаксис. Если да то посоветуйте базу, которую можно присоединить jar-файлом к проэкту и она поддерживала такой синтаксис. Ну или подскажите что не так.

По сути вот ошибки. Буду благодарен любому совету

CREATE TABLE `oc_address` (
  `address_id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `company` varchar(40) NOT NULL,
  `address_1` varchar(128) NOT NULL,
  `address_2` varchar(128) NOT NULL,
  `city` varchar(128) NOT NULL,
  `postcode` varchar(10) NOT NULL,
  `country_id` int(11) NOT NULL DEFAULT '0',
  `zone_id` int(11) NOT NULL DEFAULT '0',
  `custom_field` text NOT NULL,
  PRIMARY KEY (`address_id`),
  KEY `customer_id` (`customer_id`)  //вот тут выпадает Syntax error in SQL statement "CREATE TABLE `OC_ADDRESS` (
                                                        //                           `ADDRESS_ID` INT(11) NOT NULL AUTO_INCREMENT,
                                                        //                             `CUSTOMER_ID` INT(11) NOT NULL,
                                                        //                             `FIRSTNAME` VARCHAR(32) NOT NULL,
                                                        //                             `LASTNAME` VARCHAR(32) NOT NULL,
                                                        //                             `COMPANY` VARCHAR(40) NOT NULL,
                                                        //                             `ADDRESS_1` VARCHAR(128) NOT NULL,
                                                        //                             `ADDRESS_2` VARCHAR(128) NOT NULL,
                                                        //                             `CITY` VARCHAR(128) NOT NULL,
                                                        //                             `POSTCODE` VARCHAR(10) NOT NULL,
                                                        //                             `COUNTRY_ID` INT(11) NOT NULL DEFAULT '0',
                                                        //                             `ZONE_ID` INT(11) NOT NULL DEFAULT '0',
                                                        //                             `CUSTOM_FIELD` TEXT NOT NULL,
                                                        //                             PRIMARY KEY (`ADDRESS_ID`)
                                                        //                             KEY[*] `CUSTOMER_ID` (`CUSTOMER_ID`)
                                                        //                           ) "; expected "INDEX, ,, )";

) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;


//если строку с ключем закоментировать , но по последней строке вылазит
//Syntax error in SQL statement "CREATE TABLE `OC_ADDRESS` (
//  `ADDRESS_ID` INT(11) NOT NULL AUTO_INCREMENT,
//  `CUSTOMER_ID` INT(11) NOT NULL,
//  `FIRSTNAME` VARCHAR(32) NOT NULL,
//  `LASTNAME` VARCHAR(32) NOT NULL,
//  `COMPANY` VARCHAR(40) NOT NULL,
//  `ADDRESS_1` VARCHAR(128) NOT NULL,
//  `ADDRESS_2` VARCHAR(128) NOT NULL,
//  `CITY` VARCHAR(128) NOT NULL,
//  `POSTCODE` VARCHAR(10) NOT NULL,
//  `COUNTRY_ID` INT(11) NOT NULL DEFAULT '0',
//  `ZONE_ID` INT(11) NOT NULL DEFAULT '0',
//  `CUSTOM_FIELD` TEXT NOT NULL,
//  PRIMARY KEY (`ADDRESS_ID`),
//)[*] ENGINE=MYISAM AUTO_INCREMENT=25 DEFAULT CHARSET=UTF8;"; expected "identifier";


Сообщение было отредактировано: 18 май 21, 17:46
18 май 21, 17:52    [22323762]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
Stanislav Bashkyrtsev
Member

Откуда: СПб
Сообщений: 137
Значит MySQL экспортирует вещи, которые не поддерживаются H2. Вот это в принципе умеет только MySQL распознать: ENGINE=MyISAM. Если хочется все-таки идти дорогой бекап->считать в inmemory db (я бы еще раз взвесил все за и против), то прийдется писать доп обработку этого файла - заменять MySQL-специфичные штуки на то что поймет H2.
18 май 21, 18:24    [22323783]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Если убрать опции движка и физического хранения то все работает.
D:\h2\1.4.200\bin>h2-shell.bat

Welcome to H2 Shell 1.4.200 (2019-10-14)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> CREATE TABLE `oc_address` (
  `address_id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `company` varchar(40) NOT NULL,
  `address_1` varchar(128) NOT NULL,
  `address_2` varchar(128) NOT NULL,
  `city` varchar(128) NOT NULL,
  `postcode` varchar(10) NOT NULL,
  `country_id` int(11) NOT NULL DEFAULT '0',
  `zone_id` int(11) NOT NULL DEFAULT '0',
  `custom_field` text NOT NULL,
  PRIMARY KEY (`address_id`)
...> ...> ...> ...> ...> ...> ...> ...> ...> ...> ...> ...> ...> ...> );
(Update count: 0, 24 ms)
sql>
sql> select * from oc_address;
ADDRESS_ID | CUSTOMER_ID | FIRSTNAME | LASTNAME | COMPANY | ADDRESS_1 | ADDRESS_2 | CITY | POSTCODE | COUNTRY_ID | ZONE_ID | CUSTOM_FIELD
(0 rows, 17 ms)


Автор, подкорректируй исходники и все заработает.
18 май 21, 20:43    [22323831]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
pycha
Member

Откуда:
Сообщений: 11
да, спасибо. Я это тоже уже заметил. Хочу уточнить: там в конце AUTO_INCREMENT=25. Если его убрать на функционал никак не повлияет?. гугл выдает кучу ответов, но только об AUTO_INCREMENT , который назначается столбцу.
18 май 21, 22:49    [22323858]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Скорее всего не влияет ни на что. Тестируй. Смотри как работает.
18 май 21, 23:25    [22323870]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3106
pycha,

Может быть ты "на пальцах" объяснишь что ты хочешь получить в конечном счёте и какие исходные данные у тебя есть? Местные жители придумают что-нибудь толковое и подскажут тебе куда копать. А то, здаётся мне, что-то неладное ты придумал.
19 май 21, 08:46    [22323951]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
Stanislav Bashkyrtsev
Member

Откуда: СПб
Сообщений: 137
Garrick, он в 1ом посте сослался на тему с предысторией.
19 май 21, 09:27    [22323964]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
Garrick,
В прошлой теме он описал.
19 май 21, 09:27    [22323966]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
pycha
Member

Откуда:
Сообщений: 11
так вроде все уже и обьяснил. на данный момент вопрос частично решен. есть sql файл с командами для заполнения базы данных . скачивается с сайта- интернет магазина. нужно на лету вытянуть с него нужные мне данные. можно было бы просто спарсить, но я решил научится работать с базами данных и решил ипользовать inmemory субд Н2 чтобы вначале заполнить таблицы, а потом вытянуть нужные мне данные из базы подсредством sql запросов. Проблемма возникла из-за того что Н2 не полностью понимает синтаксис MySQL. Команды прийдется адаптировать. Разве что кто-то посоветует другую in-memory бд , которая будет понимать синтаксис MySQL
19 май 21, 09:29    [22323969]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
pycha,
Решил обучаться - обучайся.22323870
19 май 21, 09:38    [22323978]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3106
pycha
так вроде все уже и обьяснил. на данный момент вопрос частично решен. есть sql файл с командами для заполнения базы данных . скачивается с сайта- интернет магазина. нужно на лету вытянуть с него нужные мне данные. можно было бы просто спарсить, но я решил научится работать с базами данных и решил ипользовать inmemory субд Н2 чтобы вначале заполнить таблицы, а потом вытянуть нужные мне данные из базы подсредством sql запросов. Проблемма возникла из-за того что Н2 не полностью понимает синтаксис MySQL. Команды прийдется адаптировать. Разве что кто-то посоветует другую in-memory бд , которая будет понимать синтаксис MySQL


Почему бы не взять MySQL? Она бесплатная, устанавливается очень просто.
И потом, есть 100% уверенность, что можно "нужно на лету вытянуть с него нужные мне данные", он их отдаст? Или есть административный доступ к машине где установлен этот магазин? Можно же "научится работать с базами данных" и на более простых и понятных задачах, специальные учебники, курсы, уроки и т.п. для этого есть в большом количестве.
19 май 21, 11:24    [22324061]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3106
pycha,

Вот тут есть описание как включить режим совместимости с MySQL и какие фичи в каком виде поддерживаются http://www.h2database.com/html/features.html#compatibility. Попробуй. Но надо понимать что 100% совместимости не будет никогда. Плохо разбираясь в предмете в целом, ещё дополнительно придётся бороться с несовместимостью SQL разных СУБД, со всякими непонятными и неочевидными ошибками из-за этого.
19 май 21, 11:36    [22324071]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
pycha
Member

Откуда:
Сообщений: 11
Garrick

Почему бы не взять MySQL? Она бесплатная, устанавливается очень просто.


потому- что прога должна без проблем запускаться на любом компе, в перспективе она будет продаваться и не должна зависеть от от функционала сайта. Должна быть полностью настраиваемая
19 май 21, 18:38    [22324367]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
pycha
Member

Откуда:
Сообщений: 11
Garrick,спасибо, буду читать
19 май 21, 18:39    [22324369]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3106
pycha
Garrick

Почему бы не взять MySQL? Она бесплатная, устанавливается очень просто.


потому- что прога должна без проблем запускаться на любом компе, в перспективе она будет продаваться и не должна зависеть от от функционала сайта. Должна быть полностью настраиваемая


т.е. в дальнейшем ваша программа не будет зависеть от базы того интернет-магазина и будет работать совершенно автономно?

P.S. всегда поражался таким наполеоновским планам - "я не знаю как эту херню сделать, но я её обязательно продам и стану миллионером". Молодец! Так держать!
20 май 21, 10:48    [22324634]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Норм амбиции . В этот форум кст. приходят не только разработчики. Но и всякие менеджеры проектов
и прочие около-It личности для прояснения рисков.
20 май 21, 11:05    [22324647]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
pycha
Member

Откуда:
Сообщений: 11
Спасибо за комментарии. Сейчас она делается под один сайт, и уже рабочая. Поменять один сайт на другой, не очень и сложно
В общем это не по теме

Сообщение было отредактировано: 21 май 21, 09:05
21 май 21, 09:13    [22325113]     Ответить | Цитировать Сообщить модератору
 Re: h2 не принимает команды  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
pycha
Garrick

Почему бы не взять MySQL? Она бесплатная, устанавливается очень просто.


потому- что прога должна без проблем запускаться на любом компе, в перспективе она будет продаваться и не должна зависеть от от функционала сайта. Должна быть полностью настраиваемая

чтобы прога запускалась на любом компе - она должна быть написана на джава,тогда она будет запускаться даже на утюге
по бд если нахаляву то конечно это постгрес - там оплачивается по факту только жук( но я думаю врядли вы даже знаете що це таке)
22 май 21, 19:58    [22325750]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить