Java 如何在运行时更改sql查询?
我有一个Java对象,它有一个方法“getUser”,可以执行查询,例如“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
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吗?我们可以帮你修理。