如何将java.util.Date转换为oracle接受的格式?
我想在接受日期参数的存储过程中将日期作为参数传递。我的oracle db接受的日期格式,例如2017年7月10日 现在我试过了如何将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日,但由于它是字符串,我的表不接受此值。 如何将其转换为日期数据类
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;