关于java和mysql的查询问题。怎么弄一个上下区间的数字查询,求大神指教

想弄成这样图片说明
但是价格和面积两项的检索有问题
这是我的jsp代码




户型:







地址:







价格:


onkeyup="value=value.replace(/[^\d]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"/>
---
onkeyup="value=value.replace(/[^\d]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"/>




面积:


onkeyup="value=value.replace(/[^\d]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"/>
---
onkeyup="value=value.replace(/[^\d]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"/>


这里是方法的代码
public String chuzuRes()
{
List chuzuList=new ArrayList();
HttpServletRequest request=ServletActionContext.getRequest();
String jiage1=request.getParameter("jiage1").trim();
String jiage2=request.getParameter("jiage2").trim();
String mianji1=request.getParameter("mianji1").trim();
String mianji2=request.getParameter("mianji2").trim();
    if(jiage1.equals(""))
    {
        jiage1="0";
    }
    if(jiage2.equals(""))
    {
        jiage2="888888888";
    }
    if(mianji1.equals(""))
    {
        mianji1="0";
    }
    if(mianji2.equals(""))
    {
        mianji2="888888888";
    }


    StringBuffer sql=new StringBuffer("from TChuzu where huxing like '%"+huxing.trim()+"%'"+" and dizhi like '%"+dizhi.trim()+"%'");
    List chuzuList1=chuzuDAO.getHibernateTemplate().find(sql.toString());
    for(int i=0;i<chuzuList1.size();i++)
    {
        TChuzu chuzu=(TChuzu)chuzuList1.get(i);
        Double jiage=Double.parseDouble(chuzu.getJiage());
        Double mianji=Double.parseDouble(chuzu.getMianji());
        System.out.println(mianji+"YY");

        if(jiage >=Double.parseDouble(jiage1) && jiage <=Double.parseDouble(jiage2) && mianji >=Double.parseDouble(mianji1) && mianji <=Double.parseDouble(mianji2))
        {
            chuzuList.add(chuzu);
        }
    }
    request.setAttribute("chuzuList", chuzuList);
    return ActionSupport.SUCCESS;
}


现在是上面的两项正常,下面两个报错。
求大神给看看怎么改合适
报错:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.NumberFormatException: empty String
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
root cause

java.lang.NumberFormatException: empty String
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
java.lang.Double.parseDouble(Double.java:510)
com.action.chuzuAction.chuzuRes(chuzuAction.java:168)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)

你的堆栈很明确,168行调用parseDouble的问题,输入参数检查一下吧
java.lang.Double.parseDouble(Double.java:510)
com.action.chuzuAction.chuzuRes(chuzuAction.java:168)

你没贴行号:
maybe this
Double jiage=Double.parseDouble(chuzu.getJiage());

希望对你有帮助

没看出来和mysql什么关系,你这是传值问题吧。传了个空字符串,转化数字的时候出错

在下面两句中:
Double jiage=Double.parseDouble(chuzu.getJiage());
Double mianji=Double.parseDouble(chuzu.getMianji());

        chuzu.getJiage()、chuzu.getMianji()这两个方法的返回值不是纯数字,或不符合数字格式。
        1.最好用debug模式调试一下,看看这两个方法的值是否符合数字格式;
        2.或,再把数据转换为Double前,把两个方法的值打印到控制台看一下;这两个方法的值是否符合数字格式。
        System.out.println(chuzu.getJiage());System.out.println(chuzu.getMianji());

作为检索条件,有时是可以不输入的,不输入时就没有该检索条件。
有时可能输入不是数字的值(输入错误)。
所以,在转换前需要判断下。

事例:
String jiageStr = chuzu.getJiage();
Double jiage = null;
if(jiageStr != null && jiageStr != ""){
if(isNumber(jiageStr)){
jiage=Double.parseDouble(chuzu.getJiage());
} else {
返回页面,要求用户输入正确的数字。
}
}

if(jiage != null){
作为检索条件设置。否则该字段不作为检索条件,检索时没有该条件。
}

private boolean isNumber(String str){
如果值为数字,返回true;
否者返回false;
}

 sql='select * from A where 1=1 '
 if(min!=null and min != '')
 sql+= ' and price>min'
  if(max!=null and max != '')
 sql+= ' and price<max'

参数在使用时,要先判空
比如,你可以这样写:
StringBuffer sql=new StringBuffer("from TChuzu where 1 = 1");
if(StringUtils.isNotBlank(huxing)){
sql.append(" and huxing like %").append(huxing.trim()).append("%");
}
....

转double之前也要先判空

价格和面积都用两个字段保存。
例如:a.在前天取值的时候用,将价格和面积的之后隔开
b,在controller中取值的 时候。
String price = request.getParameter("price");//价格
String[] pricearr=oper.split("\;");
String price1=pricearr[0];
String price2=pricearr[1];
String measure = request.getParameter("measure ");//面积
String[] measure arr=oper.split("\;");
String measure1=measure[0];
String measure2=measure[1];

c。在写sql
select * from a where price BETWEEN price1 ON price2 and measure BETWEEN measure1 ON measure2