gpt4 book ai didi

java - 错误: The string representation of a date/time value is out of range

转载 作者:行者123 更新时间:2023-12-02 01:31:46 25 4
gpt4 key购买 nike

我正在处理本地 java 数据库,并且在尝试在数据库表中插入日期时不断出现此错误

错误

Error code 30000, SQL state 22007: The string representation of a date/time value is out of range

查询

INSERT INTO
conference (titre, institut_organisatrice, date_conf, date_limite_soumission, date_limite_inscription, montant, frais_inscrit_pro, frais_inscrit_acadm, frais_inscrit_etud, idpresident)
VALUES
(
'Smart Tunisia', 'ministere de la recherche scientifique', '05/10/2019', '20/09/2019', '20/09/2019', 300, 200, 150, 50, 1
)
;

最佳答案

tl;博士

myPreparedStatement                                   // Use a prepared statement for most of your SQL work, to pass objects in your JDBC code. Bonus: Doing so avoids SQL-injection attacks too.
.setObject( // Replace a `?` placeholder in your SQL statement.
… , // Specify which `?` placeholder.
LocalDate.parse( // Use `LocalDate` class for a date-only value without time-of-day and without time zone.
"05/10/2019" ,
DateTimeFormatter.ofPattern( "MM/dd/uuuu" ) // Specify a formatting pattern to match your input string.
)
)

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

对于日期时间值,请使用 SQL (DATE) 和 Java (LocalDate) 中的日期时间类型。使用适当的类型而不仅仅是字符串可以使您的代码self-documenting ,确保有效值,并提供 type-safety

PreparedStatement 和占位符

更改 SQL 以使用带有 prepared statement? 占位符。作为奖励,您将消除 SQL-Injection 的风险攻击。

在 Stack Overflow 中搜索类名 PreparedStatement了解更多。这已经被讨论过很多次了。

本地日期

将字符串输入解析为 LocalDate 对象。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu" ); 
LocalDate ld = LocalDate.parse( "05/10/2019" , f ) ;

指定占位符的值。

myPreparedStatement.setObject( … , ld ) ;

从数据库中的DATE 列检索时。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

ISO 8601

提示:学习使用标准ISO 8601将日期时间值序列化为文本时的格式。使用本地化格式仅用于向用户呈现,而不是在业务逻辑中使用。

方便的是,java.time 类在生成和解析字符串时默认使用标准格式。

LocalDate.parse( "2019-05-10" )  // May 10, 2019. 
<小时/>

关于java.time

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

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

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

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

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于java - 错误: The string representation of a date/time value is out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55933612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com