Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时更改sql查询?_Java_Sql - Fatal编程技术网

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

Java 如何在运行时更改sql查询?,java,sql,Java,Sql,我有一个Java对象,它有一个方法“getUser”,可以执行查询,例如“select*fromuser when-table.name=$param1” 该方法具有参数“Map params”,例如“params.add(“param1”、“Den”)” 我想将查询存储在其他文件中,例如GetUser.sql 运行程序时,我更改查询 这是怎么回事 我找不到框架您可以使用java属性文件存储查询。在程序执行期间,您可以从属性文件加载查询并填充参数,然后执行对数据库的最终查询 query.getu

我有一个Java对象,它有一个方法“getUser”,可以执行查询,例如“
select*fromuser when-table.name=$param1

该方法具有参数“
Map params
”,例如“
params.add(“param1”、“Den”)

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

运行程序时,我更改查询

这是怎么回事


我找不到框架

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

query.getuser = select * from user when table.name= $param1
从代码加载属性文件并获取查询字符串:

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

或者,您可以使用JPA/Hibernate命名查询,将查询保存到另一个外部映射文件中。请参阅,

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

query.getuser = select * from user when table.name= $param1
从代码加载属性文件并获取查询字符串:

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

或者,您可以使用JPA/Hibernate命名查询,将查询保存到另一个外部映射文件中。请参阅,

您可以从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的答案。

您可以从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的答案。

运行程序时,您想手动或从程序内部更改查询?我想做后期绑定,更改文件sql我可以自己和其他程序。运行程序时,您想手动或从程序内部更改查询?我想做后期绑定,更改名为queryif的文件sql I can other program and imf.JPA/Hibernate-如果在运行时更改查询,它将不会选择您希望在运行时更改查询的原因。在运行时,您可能有几个查询。您可以选择适当的一个并执行它。在运行时构建整个查询字符串不是一个好主意,因为它容易受到SQL注入的攻击。您提到代码中存在bug。你能指定哪些bug吗?我们可以帮助您修复它们。JPA/Hibernate命名为queryif-如果在运行时更改查询,它将不会选择您希望在运行时更改查询的原因。在运行时,您可能有几个查询。您可以选择适当的一个并执行它。在运行时构建整个查询字符串不是一个好主意,因为它容易受到SQL注入的攻击。您提到代码中存在bug。你能指定哪些bug吗?我们可以帮你修理。