2013-08-15 4 views
1

У меня есть объект Java с методом «GetUser», который будет делать запрос, например «select * from user when table.name= $param1»Как изменить запрос sql во время выполнения?

Метод имеет параметр «Map<String, String> params», например «params.add("param1", "Den")»

Я хочу сохранить запрос в другом файле, например GetUser.sql

При запуске программы я меняю запрос.

Как это сделать?

Я не нашел рамки

+0

При запуске программы вы хотите изменить запрос вручную или изнутри программы? – Jazib

+0

Я хочу сделать последнее связывание, изменить файл sql. Я могу использовать другую программу и себя. –

ответ

3

Вы можете использовать ява свойство файла магазин запрос. Во время выполнения программы вы можете загрузить запрос из файла свойств и заполнить параметры и выполнить окончательный запрос в базе данных.

query.getuser = select * from user when table.name= $param1 

С кодом нагрузки файл свойств и получить строки запроса:

Properties property = //load property file 
String getUserQuery= propertie.getProperty("query.getuser"); 

В качестве альтернативы можно использовать JPA/Hibernate именованный запрос, где вы можете сохранить ваш запрос в другой внешний файл сопоставления. Смотрите, http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch13.html

+0

Я сделал это, но много ошибок. С кем-то познакомилась с готовой библиотекой –

+0

@GlebBelyaev, см. Мой обновленный ответ –

+0

JPA/Hibernate с именем queryif - если изменить запрос во время выполнения, он не заберет –

1

Вы можете попробовать FileAlterationMonitor от Apache Commons-VFS:

FileSystemManager fsManager = VFS.getManager(); 
FileObject file = fsManager.resolveFile("/path-to-file"); 
DefaultFileMonitor fm = new DefaultFileMonitor(new FileChangeListener()); 
fm.addFile(file); 
fm.start(); 

public class FileChangeListener implements FileListener { 
    @Override 
    public void fileCreated(FileChangeEvent event) throws Exception { 
    //do nothing 
    } 

    @Override 
    public void fileDeleted(FileChangeEvent event) throws Exception { 
    //do nothing 
    } 

    @Override 
    public void fileChanged(FileChangeEvent event) throws Exception { 
    //Reload query from file 
    } 
} 

Для запроса перегрузочного вы можете использовать ответ Shamim Ahmmed в.

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