我有以下网络应用程序: 用户可以输入java简单日期格式模式和日期(当然与java简单日期格式模式匹配),我想将这些日期存储在oracle数据库中。
因此我需要将java简单日期格式模式转换为oracle模式。 E.g:
等等。
而不是以下代码只有一个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')
答案 0 :(得分:3)
不,你不是。您应该使用因此我需要将java简单日期格式模式转换为oracle模式
PreparedStatement
,并在其上调用setDate
或setTimestamp
来指定您感兴趣的价值。
避免字符串转换,除非他们从根本上是您尝试做的事情的一部分(例如,在用户界面中显示日期/时间)。如果只是将信息从您的应用程序传输到数据库,反之亦然,您应该尽可能减少所需的转化次数。
答案 1 :(得分:0)
Answer by Jon Skeet是正确的,但现在引用一些遗留类已经过时了。 java.sql.Date
和java.sql.Timestamp
及相关类现在分别由 java.time 类,LocalDate
和Instant
取代。但是你的问题需要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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。