Ошибка в синтаксисе sql при запуске скрипта sql в jpa - PullRequest
0 голосов
/ 30 сентября 2018

Я запускаю MySQL-скрипт в моем файле persistence.xml в java для ввода некоторых значений в некоторые таблицы MySQL:

INSERT INTO names(name,surname,gender) VALUES('Emilie','Knudsen','female'); INSERT INTO names(name,surname,gender) VALUES('Aya','Knudsen','female'); INSERT INTO names(name,surname,gender) VALUES('Ida','Jørgensen','female'); INSERT INTO names(name,surname,gender) VALUES('Ellen','Mortensen','female'); INSERT INTO names(name,surname,gender) VALUES('Mathilde','Sørensen','female'); INSERT INTO names(name,surname,gender) VALUES('Emilie','Knudsen','female'); INSERT INTO names(name,surname,gender) VALUES('Ella','Rasmussen','female'); INSERT INTO names(name,surname,gender) VALUES('Maja','Larsen','female'); INSERT INTO names(name,surname,gender) VALUES('Sofie','Madsen','female'); INSERT INTO names(name,surname,gender) VALUES('Silje','Vad','female'); INSERT INTO names(name,surname,gender) VALUES('Sofie','Larsen','female'); INSERT INTO names(name,surname,gender) VALUES('Vigga','Petersen','female'); INSERT INTO names(name,surname,gender) VALUES('Victoria','Christensen','female'); INSERT INTO names(name,surname,gender) VALUES('Liv','Larsen','female'); INSERT INTO names(name,surname,gender) VALUES('Malou','Jørgensen','female'); INSERT INTO names(name,surname,gender) VALUES('Merle','Olsen','female'); INSERT INTO names(name,surname,gender) VALUES('Alberte','Andersen','female'); INSERT INTO names(name,surname,gender) VALUES('Emma','Kristensen','female'); INSERT INTO names(name,surname,gender) VALUES('Filippa','Christiansen','female'); INSERT INTO names(name,surname,gender) VALUES('Johanne','Poulsen','female'); INSERT INTO names(name,surname,gender) VALUES('Vigga','Jørgensen','female'); INSERT INTO names(name,surname,gender) VALUES('Ellen','Thomsen','female'); INSERT INTO names(name,surname,gender) VALUES('Caroline','Møller','female'); INSERT INTO names(name,surname,gender) VALUES('Laura','Møller','female'); INSERT INTO names(name,surname,gender) VALUES('Thea','Knudsen','female'); 

Когда я запускал скрипт в рабочей среде MySQL, он работал нормально(некоторые записи были с тем же именем, потому что я использовал это в качестве внешнего ключа).

Но когда я запускаю тот же сценарий из моего файла persistence.xml, я получаю эту ошибку:

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO names(name,surname,gender) VALUES('Aya','Knudsen','female'); INSERT ' at line 1

Код ошибки: 1064

Вот мой код persistence.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="samplePU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/Women?zeroDateTimeBehavior=convertToNull"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.password" value="*****"/>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
      <property name="javax.persistence.sql-load-script-source" value="createData.sql"/>
    </properties>
  </persistence-unit>
</persistence>

Когда я проверил синтаксис, почему возникает эта проблема?

1 Ответ

0 голосов
/ 30 сентября 2018

Вы должны обновить свой «скрипт», чтобы поместить символ конца строки между всеми INSERT операторами.Например,

INSERT INTO names(name,surname,gender) VALUES('Emilie','Knudsen','female'); 
INSERT INTO names(name,surname,gender) VALUES('Aya','Knudsen','female'); 
INSERT INTO names(name,surname,gender) VALUES('Ida','Jørgensen','female'); 
INSERT INTO names(name,surname,gender) VALUES('Ellen','Mortensen','female'); 

Некоторые провайдеры JPA могут определить, где находится конец строки, и отделить операторы JDBC, но другие этого не делают.Похоже, что вы помещаете все через JDBC в одно утверждение, которое, как вы видели, потерпит неудачу.Вам также следует вызвать ошибку в вашем JPA-провайдере для обработки таких случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...