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

时间:2017-07-13 11:53:43

标签: java oracle

我想在接受日期参数的存储过程中将日期作为参数传递。我的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接受它。

6 个答案:

答案 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 heredocumentation for date format strings here

祝你好运。

答案 5 :(得分:0)

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

  • 使用DatePreparedStatement
  • 格式化为setDate()
  • 使用其他标准JDBC驱动程序函数
  • 意识到所有这些都依赖于语言环境

但是,一些旧的Cobol程序员(对Java或Date一无所知)告诉我你可以使用String格式{{1} }}

Oracle 11g可以接受以下内容:en-US语言环境:

DDMMMYYYY