如何在运行时更改sql查询?

时间:2013-08-15 09:29:22

标签: java sql

我有一个带有方法“getUser”的Java对象,它会进行查询,例如“select * from user when table.name= $param1

该方法的参数为“Map<String, String> params”,例如“params.add("param1", "Den")

我想将查询存储在其他文件中,例如GetUser.sql

运行程序时,我更改了查询。

这是怎么做到的?

我找不到框架

2 个答案:

答案 0 :(得分:3)

您可以使用java属性文件存储您的查询。在程序执行期间,您可以从属性文件加载查询并填充参数并对数据库执行最终查询。

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

答案 1 :(得分:1)

您可以从Apache commons-vfs:

尝试FileAlterationMonitor
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的答案。