java简单日期模式到oracle sql日期模式

时间:2014-08-14 08:25:44

标签: java sql oracle date

我有以下网络应用程序: 用户可以输入java简单日期格式模式和日期(当然与java简单日期格式模式匹配),我想将这些日期存储在oracle数据库中。

因此我需要将java简单日期格式模式转换为oracle模式。 E.g:

  • " dd-MM-yyyy HH:mm:ss" 进入" DD-MM-YYYY HH24:MI:SS"
  • " dd-MM-yy HH:mm:ss" 进入" DD-MM-YY HH24:MI:SS"
  • " dd-MM-yy HH:mm" 进入" DD-MM-YY HH24:MI"

等等。

而不是以下代码只有一个SimpleDateFormat我希望将所有或至少一大堆SimpleDateFormatPatterns翻译成Oracle模式:

SimpleDateFormat sFormat = new SimpleDateFormat( "dd-MM-yyyy HH:mm:ss");
String sqlSnippet = "TO_DATE('" + sFormat.format(date) + "','DD-MM-YYYY HH24:MI:SS')";

是否有库或可能只是一个映射列表来执行此操作?

感谢。

编辑: 我需要手动构建SQL,因为用户定义了条件,比较了用户界面中的运算符和连接。 最后我有类似的东西

AND col2 > TO_DATE('26-09-2012','DD-MM-YYYY')

2 个答案:

答案 0 :(得分:3)

  

因此我需要将java简单日期格式模式转换为oracle模式

不,你不是。您应该使用PreparedStatement,并在其上调用setDatesetTimestamp来指定您感兴趣的价值。

避免字符串转换,除非他们从根本上是您尝试做的事情的一部分(例如,在用户界面中显示日期/时间)。如果只是将信息从您的应用程序传输到数据库,反之亦然,您应该尽可能减少所需的转化次数。

答案 1 :(得分:0)

Answer by Jon Skeet是正确的,但现在引用一些遗留类已经过时了。 java.sql.Datejava.sql.Timestamp及相关类现在分别由 java.time 类,LocalDateInstant取代。但是你的问题需要LocalDateTime类。

智能对象,而不是哑字符串

您反对表示您的日期时间值。从JDBC 4.2及更高版本开始,您可以直接与数据库交换 java.time 对象。

您的输入缺少任何时区指示符或与UTC的偏移量。因此,在Java中将其解析为LocalDateTime,以便存储在类似于SQL标准TIMESTAMP WITHOUT TIME ZONE的类型的列中。

DateTimeFormatter f1 = DateTimeFormatter.ofPattern( "dd-MM-uuuu HH:mm:ss" ) ;
DateTimeFormatter f2 = DateTimeFormatter.ofPattern( "dd-MM-uu HH:mm:ss" ) ;
DateTimeFormatter f3 = DateTimeFormatter.ofPattern( "dd-MM-uu HH:mm" ) ;

按输入字符串的长度选择格式化程序。

LocalDateTime ldt = LocalDateTime.parse( myInputString , f2 ) ;
  

我需要手动构建SQL,因为用户定义了条件,比较用户界面中的运算符和连接。最后我有类似的东西

     

String sqlSnippet =" TO_DATE('" + sFormat.format(date)+"',' DD-MM-YYYY HH24:MI: SS')&#34 ;;

不,不要将您的日期时间值作为文本嵌入到SQL字符串中。而是使用PreparedStatement替换?替换为LocalDateTime占位符对象。

String sql = "SELECT when FROM tbl WHERE when > ? ;" ;

在运行时将要滑动的对象传递给该占位符。

myPreparedStatement.setObject( … , ldt ) ;

检索:

LocalDateTime ldt = myResultSet.getObject( … ; LocalDateTime.class ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore