Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法不接受可为空的日期,为什么?_Java - Fatal编程技术网

Java 方法不接受可为空的日期,为什么?

Java 方法不接受可为空的日期,为什么?,java,Java,我有一个有四个参数的方法,其中两个是日期类型,我的问题是当日期为null时,我有异常,我的方法不接受可为null的日期,我如何修复它,这是我的代码: Date StartDate=dateper1.getDate(); Date EndDate=dateper2.getDate(); System.out.println(StartDate); m.SearchProduct(calcul, Designation,StartDate,EndDate); 方法: public void

我有一个有四个参数的方法,其中两个是日期类型,我的问题是当日期为null时,我有异常,我的方法不接受可为null的日期,我如何修复它,这是我的代码:

    Date StartDate=dateper1.getDate();
Date EndDate=dateper2.getDate();
System.out.println(StartDate);
m.SearchProduct(calcul, Designation,StartDate,EndDate);
方法:

public void SearchProduct(JTable calcul,String Designation,Date StartDate, Date EndDate)
{
try
{
conn=con.Connect();
stmt =  conn.createStatement();
ResultSet rsDesignation=   stmt.executeQuery("SELECT * FROM calcul WHERE designation='"+Designation+"' ");
ResultSet rsDate=stmt.executeQuery("SELECT * FROM calcul WHERE dateper<='"+EndDate+"' AND dateper>='"+StartDate+"'");
if(StartDate==null && EndDate==null )
this.GetAttribut(calcul, rsDesignation);    
if(   Designation.equals(" "))
this.GetAttribut(calcul, rsDate); 
stmt.close();
//c.commit();
conn.close();
} catch (Exception e) {
System.err.println( e.getClass().getName()+": "+ e.getMessage() );
System.exit(0);
}
}

您正在将空值传递给SQL。您的程序实际收到以下信息:

SELECT * FROM calcul WHERE dateper<='null' AND dateper>='null'
可读性是编程中一个非常重要的方面。正如您可能注意到的,漂亮的格式化代码看起来更讨人喜欢,也更讨人喜欢;-

ResultSet rsDate=stmt.executeQuery("SELECT * FROM calcul WHERE dateper<='"+EndDate+"' AND dateper>='"+StartDate+"'");
如果EndDate或StartDate为null,则引发NullPointerException


添加空检查或不允许在注释中使用诸如@fge say之类的空日期

别担心,伙计,这很简单。更改您的这一行:

ResultSet rsDate=stmt.executeQuery("SELECT * FROM calcul WHERE dateper<='"+EndDate+"' AND dateper>='"+StartDate+"'");

提供或读取堆栈跟踪-alwaysdateper1.getDate back really date??发布完整代码。通过不允许空日期来修复此问题!你为什么要那样?
ResultSet rsDate=stmt.executeQuery("SELECT * FROM calcul WHERE dateper<='"+EndDate+"' AND dateper>='"+StartDate+"'");
Stringbuilder sql = new StringBuilder("SELECT * FROM calcul");
if (EndDate != null && StartDate != null){
    sql.append(" WHERE dateper<='"+EndDate+"' AND dateper>='"+StartDate+"'");
else if (EndDate == null && StartDate != null){
    sql.append(" WHERE dateper>='"+StartDate+"'");
}else if (EndDate != null && StartDate == null){
    sql.append(" WHERE dateper<='"+EndDate+"'");
}
ResultSet rsDate=stmt.executeQuery(sql);
if(StartDate==null && EndDate==null ){
    ResultSet rsDesignation=stmt.executeQuery("SELECT * FROM calcul WHERE designation='"+Designation+"' ");
    this.GetAttribut(calcul, rsDesignation);  
}  
if(Designation.equals(" ")){
    ResultSet rsDate=....; // The code above I wrote
    this.GetAttribut(calcul, rsDate); 
}