我正在开发一个java系统,它根据用户在运行时选择的属性对系统的数据库(mysql数据库)进行统计。 例如,此查询:
select count(*)
from diseases
where bloodtype = 'A+' & age BETWEEN 10 AND 20 & disease = 'coma'
其中“where”子句在运行时确定,因为我考虑使用动态SQL,因此查询可能如下所示:
select count(*)
from diseases
where bloodtype = ? & age BETWEEN ? AND ? & disease = ?
但问题是在这个系统中,不仅(?)的值在运行时确定,而且where子句中的属性(例如:血型,年龄和身份等)。
我搜索了互联网,找到了一种编写动态SQL查询的方法,即在运行时由用户的输入确定属性数量及其值,但没有找到任何东西。你能指导我吗?
答案 0 :(得分:0)
由于您不仅要动态提供数据,还要提供要查询的列,因此参数化查询不是一种可行的解决方案。
您可能需要在Java中创建语句并自行提供SQL注入保护。
请参阅I need to pass column names using variable in select statement in Store Procedure but i cannot use dynamic query,了解如何在不使用动态SQL(或使用Java字符串操作创建的查询)的情况下处理此问题 - 但所有这些都可能对您的用例而言不是最佳的。