java简单日期模式到oracle sql日期模式
我有以下web应用程序: 用户可以输入java简单日期格式模式和日期(当然与java简单日期格式模式匹配),我希望将这些日期存储在oracle数据库中 因此,我需要将java简单日期格式模式转换为oracle模式。 例如:java简单日期模式到oracle sql日期模式,java,sql,oracle,date,Java,Sql,Oracle,Date,我有以下web应用程序: 用户可以输入java简单日期格式模式和日期(当然与java简单日期格式模式匹配),我希望将这些日期存储在oracle数据库中 因此,我需要将java简单日期格式模式转换为oracle模式。 例如: “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” 等等 我希望将所有或至少
- “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 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')
因此,我需要将java简单日期格式模式转换为oracle模式
不,你没有。您应该改为使用PreparedStatement
,并调用或来指定您感兴趣的值
避免字符串转换,除非它们基本上是您尝试执行的操作的一部分(例如,在UI中显示日期/时间)。为了简单地将信息从应用程序传输到数据库,或者从数据库传输到应用程序,您应该尽可能减少所需的转换次数。正确,但在引用某些旧类时已过时。java.sql.Date
和java.sql.Timestamp
和相关类现在分别被java.time类、LocalDate
和Instant
取代。但你的问题需要全班同学回答
智能对象,而不是哑字符串
您可以使用对象来表示日期时间值。从JDBC4.2及更高版本开始,您可以直接与数据库交换java.time对象
您的输入缺少时区或UTC偏移的任何指示器。因此,在Java中解析为一个类似于SQL标准时间戳(不带时区)的列中的存储
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。最后我有了这样的东西
AND col2 > TO_DATE('26-09-2012','DD-MM-YYYY')
字符串sqlSnippet=“TO_DATE”(“+sFormat.format(DATE)+”,“DD-MM-yyyyy HH24:MI:SS”)
否,不要将日期时间值作为文本嵌入SQL字符串中。相反,使用PreparedStatement
替换为?
占位符的LocalDateTime
对象
String sql = "SELECT when FROM tbl WHERE when > ? ;" ;
传递要在运行时滑入该占位符的对象
myPreparedStatement.setObject( … , ldt ) ;
检索:
LocalDateTime ldt = myResultSet.getObject( … ; LocalDateTime.class ) ;
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(感谢您的快速回复,但我需要手动构建此sql语句。用户可以在用户界面中定义WHERE子句的条件(连接和其他内容)以及比较运算符。也许我可以使用setDate的内部API。仅仅因为您需要动态地构建一些SQL并不意味着您必须动态地完成所有操作。我强烈、强烈、强烈地敦促您不要这样做。直接在SQL中指定值充满危险。您仍然可以动态地创建SQL,但包括在那里使用参数说明符并使用
PreparedStatement.setDate
等。好的,我将尝试用这种方式解决它。无论如何,目前我无法想象如果我只给出一个Date
的话,该方法将如何知道我是想得到这样的SQLDD-MM-yyyyy
还是这样的DD-MM-yyyyyyyyyyh24:MI:SS
,这会有很大的不同WHERE子句中的ce。@user239293:为什么WHERE子句会有很大的不同?在调用到日期
之后,您希望有什么不同?您确实需要考虑您使用的是什么基本数据。也许您需要区分日期
和时间戳
值,然后确保您的字段类型正确。您是对的。WHERE子句中没有区别。我将它与trunc和to_char混淆了。