Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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.text.parseException:不可解析日期1994-09-09_Java_Sql_Oracle_Date_Prepared Statement - Fatal编程技术网

java.text.parseException:不可解析日期1994-09-09

java.text.parseException:不可解析日期1994-09-09,java,sql,oracle,date,prepared-statement,Java,Sql,Oracle,Date,Prepared Statement,我试图将java程序中的日期值发送到oracle sql数据库中。但我一直得到错误:java.text.parseexception:无法解析的日期 我将日期格式设置为: SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd", Locale.ENGLISH); java.sql.Date date = (java.sql.Date)df.parse(dob_text.getText()); 我已将数据库设置为相同的日期格

我试图将java程序中的日期值发送到oracle sql数据库中。但我一直得到错误:java.text.parseexception:无法解析的日期

我将日期格式设置为:

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd", Locale.ENGLISH);
        java.sql.Date date = (java.sql.Date)df.parse(dob_text.getText());
我已将数据库设置为相同的日期格式。 并尝试通过准备好的声明发送日期,如下所示:

ps.setDate(3, date); 

我正在输入日期1994-09-09。这是我声明的正确日期格式,对吗?我的java构造代码有什么问题吗?还有其他人有这个问题吗?如果您有任何帮助,请将格式更改为yyyy-MM-dd

我刚写了这个程序,效果很好。确保您现在没有收到其他错误

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class DateFormatDemo
{
    public static void main(String[] args) throws ParseException
    {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
        System.out.println(df.parse("1994-09-09"));
    }
}

这应该行得通,我纠正了2个错误:

  • 首先,格式应该是
    yyyy-MM-dd
    ,因为这是您输入的格式

  • 然后,您不能将
    java.util.Date
    隐式转换为
    java.sql.Date
    ,您需要使用
    java.sql.Date
    构造函数和
    java.util.Date\getTime()


解决方案
您的第一次尝试可能会抛出您提到的异常,因为Josh指出的格式错误。纠正此问题后,会出现下一个问题: java.sql.Date不是java.util.Date。因此,您不能只键入df.parse的结果,它是java.util.Date。 第三:如果向SimpleDataFormat提供模式,则可以忽略区域设置。 以下代码运行时没有错误:

    String input = "1994-09-09";
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date date = df.parse(input);
    System.out.println( date);
    java.sql.Date sqlDate = new java.sql.Date( date.getTime() );
    System.out.println( sqlDate);

您的格式使用前斜杠(
/
),但您的日期有破折号(
-
)。您是否得到classcastexception?问题的第一个元素也是和的重复。请在post.FYI之前搜索StackOverflow.com,像,
java.sql.date
java.text.simpleDataFormat
这样非常麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。你看,我没耍花招,好买卖。请接受答案。只是点击向上箭头并不认为它是正确的答案。如果它不起作用,我就不能接受。我得到错误java.lang.classcastexception java.util.date无法转换为java.sql。date@JoshChappelle它没有做到这一点:)@Cillín然后使用
newjava.sql.Date(df.parse(…).getTime())您,先生。。你是个天才!谢谢大家!@我是西林:不客气:)我觉得这个问题不应该被记下来。对于一个noob来说,这并不是一个显而易见的答案。@Cillin确实不是,但事实上,没什么好担心的。@Cillin不,不是一个显而易见的答案。但是这个问题的两个要素已经在StackOverflow上讨论过很多次了。
    String input = "1994-09-09";
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date date = df.parse(input);
    System.out.println( date);
    java.sql.Date sqlDate = new java.sql.Date( date.getTime() );
    System.out.println( sqlDate);