我想在接受日期参数的存储过程中将日期作为参数传递。我的oracle db接受的日期格式,例如10-JUL-17
现在我试过
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yy");
Date d = new Date();
String newdate = df.format(d);
System.out.println(newdate);
它打印13-JUL-17但是因为它是字符串我的表格不会接受这个值。 我怎样才能将它转换为date数据类型,以便oracle接受它。
答案 0 :(得分:2)
如果要为给定日期值设置参数,则应使用setDate()
实例的PreparedStatement
方法。
但是,此方法需要java.sql.Date
个实例,如果您的日期为java.util.Date
,则必须将其转换为:new java.sql.Date(java_util_date.getTime());
EG:
try ( PreparedStatement ps = con.prepareStatement( "SELECT * FROM table WHERE dat >= ?" ))
{
ps.setDate(1, new java.sql.Date( System.currentMillis() ) );
try ( ResultSet rs = ps.executeQuery() )
{
while ( rs.next() )
{
// process the row in rs
}
}
}
对于存储过程,请在SQL查询中使用以下语法:
{call stored_procedure(?)}
另外,如果您的存储过程未返回executeUpdate()
,请使用executeQuery()
代替ResultSet
...
(如果我没记错的话,call
关键字存在一些问题,尤其是案例。如果CALL
不起作用,请尝试call
。)
答案 1 :(得分:1)
Oracle中的Date
字段没有格式。只要数据库字段的数据类型为Date
并且您将值传递为Date
,它就应该有效。如果您将日期作为String
传递,则您的sql
必须使用TO_DATE
函数转换该值。尝试将日期值转换为java.sql.Date
,然后再将其传递给存储过程。
答案 2 :(得分:0)
您可以使用 TO_TIMESTAMP 将CHAR,VARCHAR2,NCHAR或NVARCHAR2数据类型的char转换为TIMESTAMP数据类型的值。
答案 3 :(得分:0)
如果您使用实体绑定数据,那么简单
/api/v0002/bulk/devices/add
会做
答案 4 :(得分:0)
使用TO_DATE
功能。例如:
INSERT INTO SOME_TABLE
(NUMBER_FIELD, TEXT_FIELD, DATE_FIELD)
VALUES
(1, 'ABC', TO_DATE(:p1, 'DD-MON-RR'))
You can find the docs for the TO_DATE function here和documentation for date format strings here。
祝你好运。
答案 5 :(得分:0)
完全同意其他建议的评论和答案:
Date
和PreparedStatement
setDate()
但是,一些旧的Cobol程序员(对Java或Date
一无所知)告诉我你可以使用String
格式{{1} }}
Oracle 11g可以接受以下内容:en-US语言环境:
DDMMMYYYY