2014-02-04 5 views
0

Я разрабатываю приложение J2EE с платформой Spring и базой данных MySQL. Я хочу выполнить SQL-скрипт из java (возможно, с отображением запроса) только один раз. Я храню sql-операторы в файле свойств в виде пары «ключ-значение», и я прохожу через каждый ключ и выполняю оператор.Java - Выполнение SQL-запросов только один раз

Connection con = ds.getConnection(); 
    Statement stmt = con.createStatement(); 

    Enumeration enuKeys = properties.keys(); 
    while (enuKeys.hasMoreElements()) { 
     String key = (String) enuKeys.nextElement(); 
     String value = properties.getProperty(key); 
     stmt.execute(value); 
    } 

Правильно ли это делается? или есть ли другой способ сделать то же самое? Заранее спасибо.

Update:

Как уже упоминалось в комментариях, я попробовал Spring JDBC базы данных инициализировать, но не выполняет все запросы в файле SQL. Выполняется только первый запрос «create», и он вызывает исключение «Таблица» table_name «уже существует». Другие запросы в файле .sql не выполняются. Это происходит каждый раз, когда я запускаю сервер. Просьба помочь

+0

Я думаю, что хранимая процедура sql может вам помочь. Вы это проверили? – Keerthivasan

+0

Сохранение заявлений SQL в правиле может быть не очень хорошим. Лучше иметь его как процедуру. Например, если вы вставляете sql-инструкцию, поместите ее в процедуру, вызовите ее. –

+1

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-intializing-datasource, возможно, стоит прочитать –

ответ

1

По его словам, вы пытаетесь настроить схему базы данных, когда ваш код запускается, и один из операторов не может быть запущен, потому что таблица уже существует. Вам нужно использовать операторы, которые проверяют заранее (например: CREATE TABLE IF NOT EXISTS) или улавливают исключение после выполнения каждого оператора, чтобы он мог перейти к следующему.

try { 
    stmt.execute(value); 
} catch (Exception e) { 
    //.. raise some warning and continue .. 
} 
+0

Спасибо. Я повторно посетил мое заявление и добавил, ЕСЛИ НЕ СУЩЕСТВУЕТ. Теперь все работает нормально. –

Смежные вопросы