Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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/1/oracle/10.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.util.Date转换为oracle接受的格式?_Java_Oracle - Fatal编程技术网

如何将java.util.Date转换为oracle接受的格式?

如何将java.util.Date转换为oracle接受的格式?,java,oracle,Java,Oracle,我想在接受日期参数的存储过程中将日期作为参数传递。我的oracle db接受的日期格式,例如2017年7月10日 现在我试过了 SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yy"); Date d = new Date(); String newdate = df.format(d); System.out.println(newdate); 它打印的是2017年7月13日,但由于它是字符串,我的表不接受此值。 如何将其转换为日期数据类

我想在接受日期参数的存储过程中将日期作为参数传递。我的oracle db接受的日期格式,例如2017年7月10日

现在我试过了

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yy");
Date d = new Date();
String newdate = df.format(d);
System.out.println(newdate);
它打印的是2017年7月13日,但由于它是字符串,我的表不接受此值。
如何将其转换为日期数据类型,以便oracle接受它

您可以使用转换时间戳,将char、VARCHAR2、NCHAR或NVARCHAR2数据类型的char转换为时间戳数据类型的值。

如果要将参数设置为给定的日期值,应使用
PreparedStatement
实例的
setDate()
方法

但是,此方法需要一个
java.sql.Date
实例,如果您的日期是
java.util.Date
,则必须将其转换为:
new java.sql.Date(java\u util\u Date.getTime())

例如:

编辑 对于存储过程,请在SQL查询中使用以下语法:

{call stored_procedure(?)}
另外,如果存储过程未返回
结果集,请使用
executeUpdate()
而不是
executeQuery()


(如果我没记错的话,
call
关键字出现了一些问题,尤其是在这种情况下。因此,如果
call
不起作用,请尝试
call

如果您使用实体绑定数据,请简单

@Column(name = "DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date date;

可以

在Oracle中,
日期
字段没有格式。只要DB字段的数据类型是
Date
,并且您将值作为
Date
传递,它就应该可以工作。如果您将日期作为
字符串传递
,则您的
sql
必须使用
to_date
函数来转换该值。在将日期值传递到存储过程之前,请尝试将日期值转换为
java.sql.date

使用
to_date
函数。例如:

INSERT INTO SOME_TABLE
  (NUMBER_FIELD, TEXT_FIELD, DATE_FIELD)
VALUES
  (1,            'ABC',      TO_DATE(:p1, 'DD-MON-RR'))
还有


祝你好运。

完全同意其他评论和答案,建议:

  • 使用
    PreparedStatement
    setDate()
  • 使用其他标准JDBC驱动程序函数
  • 请注意,所有这些都取决于语言环境
然而,一些老的Cobol程序员(他们对Java或
Date
一无所知)教我可以使用
格式的
字符串

以下是Oracle 11g可以接受的,并且是en US语言环境:

UPDATE table_name
   SET date_field = '10JUL2017'
 WHERE id = 1;

Date
s没有格式。如果您的Oracle数据库需要一个
Date
对象,那么格式是不相关的。可能您的Oracle代码有问题,但尚未发布。这可能会有所帮助?除了其他人建议的所有转换之外,我会将日期标记为查询参数(即使用
),并使用JDBC驱动程序方法提供相关的Java对象(即日期、时间戳等);它在内部存储为7或8字节,表示年(2字节)、月、日、小时、分钟和秒(每个字节1字节)。您使用的用户界面(SQL/Plus、SQL Developer、Toad、Java等)通常会对日期应用一种格式,使其可读,但这不是由数据库完成的。SQL/Plus和SQL Developer使用的格式是
NLS_DATE_format
session参数,存储在数据库中,但任何用户都可以独立更改自己的设置。对我来说,无论是java.util.DATE还是java.SQL.DATE,我只需要将当前日期插入2017年7月13日的格式java dates没有格式,但是可以将它们设置为JDBC参数。如何对存储过程执行相同的操作?@sagarlinbu只需使用CallableStatement而不是PreparedStatement,并在其上设置绑定参数即可。
UPDATE table_name
   SET date_field = '10JUL2017'
 WHERE id = 1;