- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 HSQLDB 制作一个小程序(使用 JavaFX gui),目前我正在尝试让“预订”部分正常工作(用户可以在有限的时间内添加新的或搜索现有的)。为此,我已经事先添加了一些日期(我使用的是database.sql脚本),例如:
INSERT INTO reservations(begin, end) VALUES ('2013-08-01', '2013-08-31')
我已经编写了一些方法(创建、更新、删除、搜索、findAll),现在我有点停留在“创建”部分。
我想将新的预订插入数据库
pstmt = con.prepareStatement("INSERT INTO reservations(begin, end) VALUES (?,?)");
但我在创建可以插入的新日期时遇到问题。
pstmt.setDate(1, (java.sql.Date) beg);
不起作用(我使用 java.util.Date 对象来保存从数据库导出的日期),它只是中止我的测试(jUnit)。
Calendar cal1 = Calendar.getInstance();
cal1.set(2014, 0, 1);
Date beginn = cal1.getTime();
仅创建以下形式的日期:Wed Jan 01 12:23:15 CET 2014
但是(我不知道日期在 HSQLDB 中是如何保存的)我希望日期为“YYYY-MM-DD”。
那么,将日历日期转换为我需要的格式的最佳方法是什么(并对它们进行强制转换?不幸的是,将字符串强制转换为日期不起作用)。并且:如果我要使用 JavaFX 让用户选择开始日期和结束日期,我使用 java.util.Date 日期的方法可以吗?
最佳答案
您应该编写以下内容,而不是导致 (java.sql.Date) beg
导致 ClassCastException
:
new java.sql.Date(beg.getTime()); // provided beg is of type java.util.Date as you wrote
如果您在 VALUES 子句中使用字符串,您可能会考虑 JDBC-escape-syntax对于日期。并且您的声明“仅以以下形式创建日期:Wed Jan 01 12:23:15 CET 2014”根本不重要,因为您只看到 java.util.Date
的方法 toString()
的输出。它与数据库中的内部状态或存储无关。您的愿望“我希望日期为“YYYY-MM-DD”。”与应用程序的表示层相当相关,而不是与数据库的内部存储格式相关,除了选择适当的数据库列类型(此处:ANSI-SQL-DATE)之外,您无法控制数据库的内部存储格式。
在表示层中,您可以使用 SimpleDateFormat
等带有模式“yyyy-MM-dd”的类来获得您想要的输出。
编辑(因为评论中存在问题):
好吧,您真的不需要担心 toString()
表示 java.util.Date
时间戳。它的内部状态只是一个 long 值,代表自 1970-01-01 以来经过的毫秒数,不包括闰秒。只需忽略 java.util.Date 的标准输出,它会显示系统区域上下文,但不会显示内部状态。使用 a.before(b)
是完全可以的,并且与 java.util.Date
的 toString()
方法的奇怪输出无关。
此外:您无法真正控制数据库工具如何显示日期列值。这就是您使用的工具的 secret 。数据库内部的内部状态可能完全不同,因此每个数据库就像一种黑匣子。
但是,当您从数据库读取日期值并将数据呈现给用户时,您必须担心 java.util.Date
对象的表示。为此,我建议使用 SimpleDateFormat
- 参见上文。但这种适应(转换为可读的人类日期格式)不在 db-tool 中,不在 JDBC 层中,而仅在用户表示层中,通常在 UI 中。
关于java - HSQLDB:使用 java 插入/获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633195/
有没有办法截断HSQLDB中的所有表? 如果这不可能,是否有任何方法可以级联删除具有外键引用的表? 最佳答案 可以截断模式中的所有表: 截断模式并提交 此命令有一些选项在指南中有描述: http://
DB 中的表数量有限制吗? 模式内的表数量是否有一些限制? 最佳答案 希望这可以帮助 What are the limitations of the database (size of columns
我想在 .script 文件中评论一个查询,我该怎么做?我用 # 测试过, -- , ({}) , , ::没有任何效果。我收到有关意外 token 的广告异常。 最佳答案 Spring 嵌入式数据
我想以编程方式启动 HSQLdb 服务器。 我创建了一个如下所示的可运行对象,然后在一个线程中启动它。 Runnable hsqlRunnable = new Runnable() {
我正在尝试使用 Liquibase 1.9.5 将一些数据加载到 HSQLDB 数据库中。我有一个 loadData 命令如下: 在我的 CSV 数据文件中,我试图将
我正在使用 HSQLDB 来持久化一个小数据,在我的查询中,我想在第一次创建表,如果它们不再存在。 但是,对于 HSQLDB,我无法像 mysql 或 mssql 等其他 dbms 一样执行查询“CR
我正在尝试将 HSQLDB 用作 spring 应用程序中的嵌入式数据库(用于测试)。由于目标生产数据库是Oracle,我想使用HSQLDBs Oracle 语法模式特性。 在我使用的 Spring
是否有与 MYSQL SHOW COLUMNS from TABLE 命令等效的 HSQLDB? 最佳答案 HSQLDB 没有用于显示表、列或其他数据库对象的单独命令。 为此目的,您使用 SELECT
我想做什么 如何让 maven/eclipse 指向 2.3.2 jar? 通过 Java/jdbc 连接到 HSQL 数据库(我想一旦我解决了上述问题我应该能够这样做) 我的设置 看来我的hsql服
当我的列名包含连字符“-”时出现异常 Entity : this is the entity name. @Entity @Table(name = "RequestHeade
我们有一个设置,使用嵌入式 HSQLDB 来支持 Java 中的 Hibernate/JPA 单元测试,并且我们使用内存数据库模式,因为我们只是希望在测试运行后丢弃数据库。我的问题是,其中一项测试由于
如何在HSQLDB 和C# .net 之间形成连接?我已经看过 SharpHSQL 和 H2Sharp,但无法连接 HSQLDB。 最佳答案 试试这样:确保您已经添加 hsqldb.dll、IKVM.
我正在尝试使用 Hibernate 和 HSQLDB。我试图将教程改编为更当前的版本,所以可能存在问题。当我使用 JUnit 运行单元测试时会发生这种情况。 我将 HSQLDB 2.3.2 与 Hib
我有 DAO 代码,其中包含一些具有 Oracle 特定语法的 JDBC,例如: select count(*) cnt from DUAL where exists (select null fro
我经常使用内存中的 HSQL 数据库作为测试数据库来编写依赖于数据库的代码的单元测试。最近我决定从 1.8.1.3 升级到 2.2.9 以利用 2.x 版本分支中添加的 ROW_NUMBER() 支持
要使用缓存表,我可以使用驱动程序 URL:jdbc:hsqldb:mem或者我应该使用 jdbc:hsqldb:file ? 我需要一个非持久性临时表来保存更多可以放入内存的数据。 文档中不清楚是否使
我正在尝试使用 2.2.9、Hibernate 3.6.9 和 Spring 3.1.2 版本设置 HSQL 数据库进行测试。我们一直在使用本地 postgresql 数据库,但正在转换以进行测试。我
我正在创建一个使用嵌入式hsqldb的基于Spring的Web应用程序。 我的spring配置非常简单: 但是通过此配置,所有数据都存储在内存中。这是创建的数据源URL jdbc:hsq
“如何索引 HSQL 数据库?” 最佳答案 您不索引数据库,而是在表中的字段上创建索引。您可以在单个列上创建索引,也可以在多个列上创建单个索引。 从这里开始 http://www.hsqldb.org
如何查看HSQLDB中表的结构(列的详细信息等)?它不像Oracle那样“desc”,那又如何呢? 最佳答案 该信息由INFORMATION_SCHEMA中的 View 提供 SELECT * FRO
我是一名优秀的程序员,十分优秀!