Java 构建动态SQL查询

Java 构建动态SQL查询,java,mysql,sql,swing,design-patterns,Java,Mysql,Sql,Swing,Design Patterns,我有一个数据库,看起来像这样- I have an excel file that look like this - Ticket # Status Person Department 1. Open John Support 2. Working Mark Engineering 3. Pending Betty Support 4.

我有一个数据库,看起来像这样-

I have an excel file that look like this - 

Ticket #      Status      Person     Department
1.            Open        John       Support
2.            Working     Mark       Engineering
3.            Pending     Betty      Support
4.            Working     Mark       Engineering
5.            Open        Mark       Support
6.            Open        John       Engineering
7.            Pending     Betty      Support 
8.            Working     John       Support
9.            Working     Mark       Support 
10.           Pending     Betty      Engineering
我正在制作一个swing应用程序,其中列出了如下信息-

I have an excel file that look like this - 

Ticket #      Status      Person     Department
1.            Open        John       Support
2.            Working     Mark       Engineering
3.            Pending     Betty      Support
4.            Working     Mark       Engineering
5.            Open        Mark       Support
6.            Open        John       Engineering
7.            Pending     Betty      Support 
8.            Working     John       Support
9.            Working     Mark       Support 
10.           Pending     Betty      Engineering
问题1。在[人名1(如标记)]下有多少张票是开放的/正在工作的/关闭的

问题2。【人名1(如标记)】下属于支持/工程部的车票数量

在应用程序中,用户应该从JCombobox中选择此人的姓名。 此外,我正在使用JFreeChart列出我已经处理过的结果

我的问题-

对于问题1。以下查询对我有用-

Select Status, count(status) 
from [table name] 
where Person=Mark 
group by status

但是我希望我的应用程序自己构建这个查询,也就是说,我希望它自己填充“Mark”[用户将在JCombobox中选择这个人]

类似地,如果用户选择按人名列出票据的部门(而不是状态),我希望应用程序自行构建以下查询

Select department, count(department) 
from [table name] 
where Person=John 
group by department
注意-用户将从2个Jcombobox下拉列表中选择人员姓名和功能[状态或部门]

更新-使其更清晰


我希望我的查询有一个“Person=?”而不是“Person=Mark”。因此,应用程序读取数据库中的“Mark”,然后用“Person=Mark”填充“Person=?”。

“但我希望我的应用程序自己构建这个查询,也就是说,我希望它自己填充“Mark”[用户将在JCombobox中选择此人]。”这不是问题。你需要我们做什么?使用事先准备好的陈述:事先准备好的陈述绝对是最好的选择。它们将防止SQL注入,并完全满足您的要求。您使用sentinel“?”字符构建语句,表示变量数据的去向,并在?使用PreparedStatement公开的几种方法之一。@jwatkins我希望我的查询有一个“Person=?”而不是“Person=Mark”。因此,应用程序读取数据库中的“Mark”,然后用“Person=Mark”填充“Person=?”。这是否更清楚?