我在dao类中有一个名为 “getDetails” 的方法。在这个方法中,我将来自两个表的两个select语句联合起来,这两个表具有几乎相同的字段,称为 “main shop” & “子商店” 并将这些查询放入预备声明。然后我将preparedStatement放到resultSet。
此 “getDetials” 方法返回 “详细信息” ,我将其用于另一种方法调解器称为 “writefile” ,以便在Microsoft Word中打印值,如 “writefile(details)” 。在 “writefile” 方法中,有一些值字符串,并将“details”的值放入相应的字符串中。并为每个值附加 “outputString” 。
在输入屏幕上,用户可以选中 “子商店” 复选框,并填写 “子商店”的详细信息。如果他们不检查,他们只需要填写 “主要详细信息” 而不是 “子商店” 。如果他们检查 “主要商店” ,我只需要打印一个字母。如果他们检查 “子商店” 并填写 “数量的子商店” ,我需要打印字母编号等于 “子商店数量” +一(主要字母)。字母格式完全相同,但只更改 “商店名称” (主要或子商店), “商店银行代码字段的值“ (主要或子商店)根据用户的选择。
在调解员中,我根据 “子商店” <的数量循环 “写文件(详情) / strong>即可。
问题是不同字母的数据是相同的(仅显示 “主店” 数据)虽然字母数量是正确的(例如,如果有两个) “子商店” ,它会打印三个字母)。我应该怎样做才能在 “主要商店” 之后的后续信件中获得 “子商店” 的价值打印出来。
这是“writefile”方法
if(flag){
this.getHeading();
StringBuffer outputString = new StringBuffer();
Date date = new Date();
SimpleDateFormat formatter=new SimpleDateFormat("dd MMMMM,yyyy");
String dateString=formatter.format(date);
details.sysDate =dateString;
String date1=(String)details.getSysDate();
if(details.getNo() != null){
no=details.getNo();
}else {no=" ";}
if(details.bankName() != null){
bname=details.getBankName();
}else {bname = " ";}
outputString.append('\"');
outputString.append(date1);
outputString.append('\"');
outputString.append(",");
outputString.append('\"');
outputString.append(no);
outputString.append('\"');
outputString.append(",");
outputString.append('\"');
outputString.append(bname);
outputString.append('\"');
outputString.append(",");
outputString.append('\"');
dos.writeBytes(outputString.toString());
dos.flush();
dos.close();
fos.close();
}
查询示例是
public Details getDetails (String No, String LoginID, String LetterID)
{
connection = DBConnection.getConnection();
StringBuffer query = new StringBuffer();
query.append("select TO_CHAR(TRUNC(SYSDATE),'DD MONTH,YYYY'),a.no, b.bank_name");
query.append("from t_newappl a,t_newappl_bank b where b.no = a.no and a.no=(select no from t_newappl whereno=?) and rownum=1 and status = 'PEND'");
query.append(" union all ");
query.append("select TO_CHAR(TRUNC(SYSDATE),'DD MONTH,YYYY'),a.no,b.bank_name");
query.append("from t_newappl a,t_newappl_bank b, newappl_sub c, t_newappl_sub_bank d where a.no = c.no and c.sub_id= d.sub_id and a.no=(select no from t_newappl where no=?) and rownum=1 and d.status = 'SPEND'");
PreparedStatement preparedStatement = connection.prepareStatement(query.toString());
preparedStatement.setString(1,ApplicationNo);
preparedStatement.setString(2,ApplicationNo);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Details = new BankDetails();
Details.No= Util.Trim(resultSet.getString("NO"));
Details.BankName= Util.Trim(resultSet.getString("BANK_NAME"));
}
resultSet.close();
preparedStatement.close();
return Details;
}
循环打印字母是
int retail = Outletht.size();
int ctr = 0;
for (int i = 1; i <= subshop.size ; i++ ){
ctr++;
Letter Letter = new Letter(lmediator);
BankDetails Details = Letter.printLetter(applicationNumber);
if (Details!=null){
if (ctr == 1) {
if ((Details.getNo() == null)
&& (Details.getLetterID() == null)
&& ((Details.getLoginID() == null) || (Details.getLoginID().equals("")))) {
} else {
Letter.databaseUpdate(Details);
}
}
Letter.writefile(Details);
Letter.callfile(Details);
context.showMessage("I01015");
}
else
{
context.showMessage("I04004");
}
}
答案 0 :(得分:0)
你的问题有点难以理解。一些示例查询输出可能有助于澄清。
如果您在区分主记录和子记录之间的区别时遇到问题,我建议您在联合之前在查询中添加一列。
从T1选择A,B,'main'作为xtype 联合所有 从T2
中选择A,B,'sub'作为xtypeA B xtype
--- --- ---
aaa bbb main
bbb ccc sub