Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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.sql.SQLException:ORA-01841:(完整)年份必须介于-4713和+之间;9999,而不是0_Java_Sql_Jdbc - Fatal编程技术网

java.sql.SQLException:ORA-01841:(完整)年份必须介于-4713和+之间;9999,而不是0

java.sql.SQLException:ORA-01841:(完整)年份必须介于-4713和+之间;9999,而不是0,java,sql,jdbc,Java,Sql,Jdbc,我已经从配置属性文件中完整地读取了B详细信息。现在我正试图通过命令行参数传递from和to date值来执行查询。下面是异常。请让我知道如何通过命令行参数将日期值传递到查询中。 注意:我已经用所有库文件创建了excutalbel Jar文件 输出: java-jar CreateExcelFile1.jar 2014/01/20 2014/01/24 Command line arguments length is 2 Array index 0 value is

我已经从配置属性文件中完整地读取了B详细信息。现在我正试图通过命令行参数传递from和to date值来执行查询。下面是异常。请让我知道如何通过命令行参数将日期值传递到查询中。 注意:我已经用所有库文件创建了excutalbel Jar文件

输出:
java-jar CreateExcelFile1.jar 2014/01/20 2014/01/24

        Command line arguments length is 2
       Array index 0 value is 2014/01/20
      Array index 1 value is 2014/01/24
       Connection Successful
         java.sql.SQLException: ORA-01841: (full) year must be between -4713 and +9999, and not be 0
代码:

   public class CreateExcelFile extends DbConnection{
   public static void main(String[] args) {
  try{
System.out.println("Command line arguments length is " + args.length);
System.out.println("Array index 0 value is " + args[0]);
System.out.println("Array index 1 value is " + args[1]);
      Connection con = openConnection();
      PreparedStatement st=con.prepareStatement("Select a.oi_intervention_id ,a.oi_region,a.oi_mrn,b.opi_title, a.oi_rx_nb ,a.oi_store_id,to_char(a.oi_doc_crtd_dt,'dd-MON-yy') as SheetName,to_char(a.oi_doc_crtd_dt,'dd-MON-yy hh.mi.ss,FF AM TZH:TZM') as oi_doc_crtd_dt,to_char(a.oi_doc_expry_dt,'dd-MON-yy hh.mi.ss,FF AM TZH:TZM') as oi_doc_expry_dt from rxesbopcs.OPCS_INTERVENTION a ,rxesbopcs.opcs_program_info b where trunc(a.oi_doc_crtd_dt) BETWEEN TO_DATE ('args[0]', 'yyyy/mm/dd') AND TO_DATE ('args[1]', 'yyyy/mm/dd') and b.opi_program_id = a.oi_program_id order by a.oi_doc_crtd_dt",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    ResultSet rs=st.executeQuery();
     createXls(rs);
     System.out.println("Your excel file has been generated!");
      closeConnection(con);
    } catch ( Exception ex ) {
     System.out.println(ex);
     }
     }

这不是PreparedStatements被赋予参数的方式(sql分散在几行上以提高可读性):


这非常好。

我认为您需要在查询字符串中插入占位符,以插入变量值,例如,而不是

 BETWEEN TO_DATE ('args[0]', 'yyyy/mm/dd') 
你会把

 BETWEEN TO_DATE (?, 'yyyy/mm/dd') 
然后调用
st.setString(1,args[0]),对于其他参数也是如此


你可能想复习一下

感谢您的投入,它现在起作用了。我能够将日期值传递到查询中!!
 BETWEEN TO_DATE (?, 'yyyy/mm/dd')