Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java简单日期模式到oracle sql日期模式_Java_Sql_Oracle_Date - Fatal编程技术网

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

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” 等等 我希望将所有或至少

我有以下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”
等等

我希望将所有或至少一大群SimpleDataFormat模式翻译成Oracle模式,而不是以下代码中只有一个SimpleDataFormat:

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
      的话,该方法将如何知道我是想得到这样的SQL
      DD-MM-yyyyy
      还是这样的
      DD-MM-yyyyyyyyyyh24:MI:SS
      ,这会有很大的不同WHERE子句中的ce。@user239293:为什么WHERE子句会有很大的不同?在调用
      到日期
      之后,您希望有什么不同?您确实需要考虑您使用的是什么基本数据。也许您需要区分
      日期
      时间戳
      值,然后确保您的字段类型正确。您是对的。WHERE子句中没有区别。我将它与trunc和to_char混淆了。