带servlet的动态SQL
我有一个名为带servlet的动态SQL,sql,sql-server,Sql,Sql Server,我有一个名为DBChart的servlet映射到url/db。该servlet根据此处使用的sql查询输出一些数据 我所拥有的: 在客户端,我正在进行如下ajax调用: $.ajax({ type : 'POST', async: false, url : 'http://localhost:8080/DBCHART/db', success : function(da
DBChart
的servlet映射到url/db
。该servlet根据此处使用的sql查询输出一些数据
我所拥有的:
在客户端,我正在进行如下ajax调用:
$.ajax({
type : 'POST',
async: false,
url : 'http://localhost:8080/DBCHART/db',
success : function(data) {/*some code*/})
在服务器端,一个静态查询显示:
String sql ="select * from Employee"
我想要什么:
我希望能够在此传递一些参数,如:
url: http://localhost:8080/DBCHART/db?Name = 'xyz'?Age = 21
在服务器端,本例中的查询应为:
select * from Employee where Name ='xyz' and Age = 21
i、 e仅当提供了这些参数时,否则应保持不变
select * from Employee
我能为高效地创建动态sql提供一些指导吗?假设在本例中,您使用varName作为'xyz',varAge作为21 ----姓名='xyz'?年龄=21岁 您可以使用这样的逻辑(思考要点:其中1=1)
这个答案是正确的,但由于安全问题,它是有缺陷的。它提到了参数化查询,但代码示例没有使用它们。该示例极易受到注入攻击-1@JoelCoehoorn:我如何克服这些漏洞?请问我可以在这个方向上做些什么吗?@Raushan:我如何从url字符串中去掉varName和varAge?我给出的代码只是给你一个逻辑,如何继续。您必须使用参数化查询来实现它,否则它容易受到sql注入的攻击。请参阅此java文档以了解参数化查询()。。。对于查询字符串,您可以从这里获取详细信息[
string sqlQuery = " select * from Employee where 1 = 1 ";
if(null != varName && !varName.isEmpty())){
// add criteria for Name
sqlQuery += " AND Name = '"+ varName + "'"; // TODO: use parametrized query
}
if(null != varAge && varAge > 0){
// add criteria for Age
sqlQuery += " AND Age = "+ varAge ; // TODO: use parametrized query
}