问题遇到的现象和发生背景
做一个案例中出现了一个bug但是,我不清楚是怎么回事
问题相关代码,请勿粘贴截图
package com.shichuang.news.dao.Impl;
import com.mysql.jdbc.StringUtils;
import com.shichuang.news.dao.BillDao;
import com.shichuang.news.domain.Bill;
import com.shichuang.news.util.JDBCUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class BillDaoImpl implements BillDao {
JDBCUtil jdbcUtil=new JDBCUtil();
@Override
public List<Bill> getAllBill(String prodName, int gys1, int sffk1) {
List<Object> para=new ArrayList<Object>();
List<Bill> list=new ArrayList<Bill>();
Connection conn = jdbcUtil.getConn();
/*String sql="SELECT id,billCode,productName,productDesc,totalPrice,isPayment,creationDate FROM smbms_bill;";*/
PreparedStatement pst = null;
ResultSet rs = null;
try {
StringBuffer sb=new StringBuffer();
sb.append("select b.id,b.billCode,b.productName,p.proName,b.totalPrice,b.isPayment,b.creationDate");
sb.append(" from smbms_bill b,smbms_provider p");
sb.append(" where b.providerId=p.id");
if (gys1!=0){
sb.append(" and b.providerId=?");
para.add(gys1);
}
if (sffk1!=0){
sb.append(" and b.isPayment=?");
para.add(sffk1);
}
if (!StringUtils.isNullOrEmpty(prodName)){
sb.append(" and b.productName=?");
// para.add("%"+prodName+"%");
// para.add("%大豆油%");
}
pst = conn.prepareStatement(sb.toString());
System.out.println(sb.toString());
for (int i = 0; i < para.size(); i++) {
pst.setObject(i+1,para.get(i));
}
rs = pst.executeQuery();
//System.out.println(rs.next());
while (rs.next()){
int id = rs.getInt("id");
System.out.println(id);
String billCode = rs.getString("billCode");
String produName = rs.getString("productName");
double totalPrice = rs.getDouble("totalPrice");
int isPayment = rs.getInt("isPayment");
Date creationDate = rs.getDate("creationDate");
String proName = rs.getString("proName");
Bill bill=new Bill();
bill.setId(id);
bill.setBillCode(billCode);
bill.setProductName(produName);
bill.setProName(proName);
bill.setTotalPrice(totalPrice);
bill.setIsPayment(isPayment);
bill.setCreationDate(creationDate);
list.add(bill);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
jdbcUtil.closeAll(rs,pst,conn);
}
return list;
}
}
package com.shichuang.news;
import com.shichuang.news.dao.BillDao;
import com.shichuang.news.dao.Impl.BillDaoImpl;
import com.shichuang.news.dao.Impl.ProviderDaoImpl;
import com.shichuang.news.domain.Bill;
import com.shichuang.news.domain.Provider;
import java.text.ParseException;
import java.util.List;
public class test {
public static void main(String[] args) throws ParseException {
BillDaoImpl bs=new BillDaoImpl();
List<Bill> allBill = bs.getAllBill("大豆油",6,2);
for (Bill bill : allBill) {
System.out.println(bill);
}
}
}
运行结果及报错内容
只要有这个代码,查询结果就显示不出来,如果把该代码注销,那么查询结果就会在控制台输出
if (!StringUtils.isNullOrEmpty(prodName)){
sb.append(" and b.productName=?");
// para.add("%"+prodName+"%");
// para.add("%大豆油%");
}
我的解答思路和尝试过的方法
已经尝试分别注销3个if语句,最后得出最后一个if语句出现问题
我想要达到的结果
我想要有该代码也能在控制台输出