2012-04-27 3 views
0

Привет Я пытаюсь загрузить данные из файла в Mysql DB с помощью hibernate.hibernate + mysql + загрузить данные в файл

вот запрос,

session.createSQLQuery("LOAD DATA INFILE E:/uploaded/NumSerie/NS/NumSerie.txt INTO TABLE prod CHARACTER SET latin1 FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;").executeUpdate(); 

Но я получаю следующую ошибку,

org.hibernate.QueryException: Space is not allowed after parameter prefix ':' [LOAD DATA INFILE E:/uploaded/NumSerie/NS/NumSerie.txt INTO TABLE prod CHARACTER SET latin1 FIELDS TERMINATED BY ';' LINES TERMINATED BY ' 
' IGNORE 1 LINES;] 
at org.hibernate.engine.query.ParameterParser.parse(ParameterParser.java:92) 
at org.hibernate.engine.query.ParamLocationRecognizer.parseLocations(ParamLocationRecognizer.java:75) 

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

Заранее благодарен!

+0

пытаются убежать: с \: – Satya

+0

Hi Satya, я попытался это, но он не работает: ( – user732362

+0

попробуйте следующее: LINES TERMINATED by '\ r \ n' – Satya

ответ

3

Попробуйте создать parameterised query

Я не Hibernate гуру, но это может работать:

session.createSQLQuery("LOAD DATA INFILE :file INTO TABLE prod CHARACTER SET latin1 FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;") 
    .setString("file", "E:/uploaded/NumSerie/NS/NumSerie.txt") 
    .executeUpdate(); 
+0

awesome! это сработало :) спасибо :) – user732362

+1

Я рад :) Для других пользователей проблема заключается в использовании двоеточия в запросе. Hibernate интерпретирует это как означающий, что в запросе есть параметр и не удается проверить имя параметра. Используя фактический параметр, мы можем передать строку пути непосредственно в MySQL. Таким образом, Hibernate не будет пытаться интерпретировать двоеточие и терпеть неудачу. – dwurf