No value specified for parameter 1 检查了好几遍,貌似不是因为值没插进去
主要的报错原因有两个
No value specified for parameter 1
com.zhidisoft.exception.DataAccessException: 执行查询语句- select * from tb_tax_payer where removeState=0 limit ?,? -是出现异常
以下是代码
//servlet中的doGet方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String pageNo = req.getParameter("page");
String pageSize = req.getParameter("rows");
String payerCode = req.getParameter("payerCode");
String payerName = req.getParameter("payerName");
System.out.println(pageNo+"\t"+pageSize+"\t"+payerCode+"\t"+payerName);
ManegeTaxPayerDaoImpl cdi = new ManegeTaxPayerDaoImpl();
if(pageNo == null) {
pageNo = "1";
}
if(pageSize == null) {
pageSize = "10";
}
int total = cdi.getAllCount();
PageUtil page = new PageUtil();
page.setTotalCount(total);
page.setPageNo(Integer.parseInt(pageNo));
page.setPageSize(Integer.parseInt(pageSize));
//JSON对象
JSONObject json = new JSONObject();
List<Map<String,String>> list = cdi.getAllTaxPayerByPageUtil(page,payerCode,payerName);
JSONArray array = JSONArray.fromObject(list);
json.put("total", total);
json.put("rows", array);
PrintWriter out = resp.getWriter();
out.write(json.toString());
out.flush();
out.close();
}
//实现类的代码:意在查询数据库中数据,根据两个条件是否存在的四种情况分页查询
public List<Map<String,String>> getAllTaxPayerByPageUtil(PageUtil page,String payerCode,String payerName) {
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
System.out.println(payerCode+"\t"+payerName);
if(payerCode!=null && payerName==null) {
sql = "select * from tb_tax_payer where removeState=0 and payerCode=? limit ?,?";
Object[] p = {payerCode,(page.getPageNo()-1)*page.getPageSize(),page.getPageSize()};
}else if(payerCode==null && payerName!=null){
sql = "select * from tb_tax_payer where removeState=0 and payerName=? limit ?,?";
Object[] p = {payerName,(page.getPageNo()-1)*page.getPageSize(),page.getPageSize()};
}else if(payerCode!=null && payerName!=null) {
sql = "select * from tb_tax_payer where removeState=0 and payerName=? and payerCode=? limit ?,?";
Object[] p = {payerName,payerName,(page.getPageNo()-1)*page.getPageSize(),page.getPageSize()};
}else {
System.out.println((page.getPageNo()-1)*page.getPageSize()+"\t"+page.getPageSize()+"\t"+payerCode+"\t"+payerName);
sql = "select * from tb_tax_payer where removeState=0 limit ?,?";
Object[] p = {(page.getPageNo()-1)*page.getPageSize(),page.getPageSize()};
}
list = db.query(sql, p);
if(list.size()>0) {
return list;
}
return null;
}
//最后是工具类,封装的通用的查询方法,这个是没错的
public static List<Map<String,String>> query(String sql,Object...args){
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
Connection conn = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
if(args!=null && args.length>0){
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
}
//执行结果
rs = ps.executeQuery();
//获取到结果集元数据,封装本次查询,查询多少列,这些列名是什么
ResultSetMetaData rsmd = rs.getMetaData();
//获取查询的总列树
int count = rsmd.getColumnCount();
while(rs.next()){
//创建一个Map集合,将当前行的所有的列放置到map集合中
Map<String,String> rowsData = new HashMap<String, String>();
for(int i=0;i<count;i++){
//根据列的索引获取列名
String columnLabel = rsmd.getColumnLabel(i+1);
//根据列名从结果集中获取某一列的值
String columnValue = rs.getString(columnLabel);
rowsData.put(columnLabel, columnValue);
}
//将当前行数据放置到list集合中
list.add(rowsData);
}
} catch (SQLException e) {
e.printStackTrace();
throw new DataAccessException("执行查询语句- "+sql+" -是出现异常",e);
} finally{
close(rs, ps, conn);
}
return list;
}
这个情况是我在getAllTaxPayerByPageUtil方法里添加那几个判断条件后发生的,单单只有
sql = "select * from tb_tax_payer where removeState=0 limit ?,?";
Object[] p = {(page.getPageNo()-1)*page.getPageSize(),page.getPageSize()};
的时候查询成功
所以请教以下前辈们这个问题出在哪了