我在自己的swing应用程序中开发了MIS报告。指一张桌子 其中第一列包含日期列,其后是发票状态的7列,例如待付款,已付款,待付款,邮寄等。
我只是试图显示EXCEL PIVOT LIKE表报告,所以我已经成功实现了。
但问题是:行数每天都在增加,我已经开发了类似的查询
select count(invoice_No)
from MyTable
where ClaimStatus='columnHeader'
AND date='row1stColumn'
,它将遍历所有行和列以获得所需的计数,并将其显示在jtable中。
但是正如我所说的那样,行数每天都在增加,SQL Server表数据也在大量增加。
所以我的计数查询有很多时间来填充该表
有什么方法可以使上述查询更快?
如果有人想查看我的代码,我会提供。
我已经实现了我的应用程序,但是由于海量数据,显示MIS报告需要花费时间
请查看我所附的图片,这是我的代码的输出。
代码是
1)在第一列中显示不同的日期
q="Select distinct(Inward_Date_Short) from Inward_Master";
PreparedStatement ps=con.prepareStatement(q);
ResultSet rs=ps.executeQuery();
while(rs.next())
{
inwardDateList.add(rs.getString(1));
}
2)JTable的静态列
headers.add("Pending For Digitization");
headers.add("Pending For Claim Creation");
headers.add("Resolution - Pending For Claim Creation");
headers.add("Pending For Approval");
headers.add("Pending For Parking");
headers.add("Pending For Posting");
headers.add("Objection");
headers.add("Pending For Payment");
headers.add("Paid");
headers.add("Rejected");
headers.add("Outward");
3)现在这是最重要的代码,我想使其变得更快
for(int i=0;i<inwardDateList.size();i++)
{
Vector varsha=new Vector();
varsha.add(inwardDateList.get(i).toString());
for(int c=1;c<headers.size();c++)
{
try(Connection con=dbConnection.dbConnector();)
{
String q="";
q=headers.get(c).toString();
PreparedStatement ps=con.prepareStatement("Select COUNT_BIG(Inward_No) from Inward_Master where Inward_Date_Short='"+inwardDateList.get(i).toString()+"' AND Claim_Status='"+q+"'");
//PreparedStatement ps=con.prepareStatement("Select count(Inward_No) from(Select Inward_No from Inward_Master where Inward_Date_Short='"+inwardDateList.get(i).toString()+"' AND Claim_Status='"+q+"') X");
ResultSet rs=ps.executeQuery();
rs.next();
data.add(rs.getInt(1));
}
catch(Exception e)
{
e.printStackTrace();
}
}
rowdata.add(data);
}