当前位置: 首页 > 知识库问答 >
问题:

显示基于今天数据的数据库

谭飞掣
2023-03-14

我如何才能显示一个包含姓名、性别和出生日期的数据表,而只显示今天出生的人?

使用来自jdbc的java连接。

也就是说,我有一张分别于2015年6月15日、2015年5月13日和2015年6月17日出生的3个孩子的表格。

逻辑执行后,只有一个DOB在2015年6月17日(今天的日期)的孩子会出现在桌面上。

共有2个答案

吴镜
2023-03-14

您应该避免旧的java.util.Date/。与Java捆绑的日历类。取而代之的是使用Joda-Time库或内置于Java8及更高版本的新java.time包(受Joda-Time启发)。下面的代码使用Joda-Time 2.8,如果使用java.time.

时区对于确定日期至关重要。例如,巴黎的新的一天比蒙特勒尔的早。大多数专业级数据库将其日期时间值存储在UTC时区。您需要根据所需的时区进行调整。例如,如果应用程序中的“今天”表示“蒙特勒尔的今天”,则必须应用“Americal/Montreal”时区。

一般来说,处理日期时间范围的最佳方法是通过“半开”方法。这意味着开始是包容的,而结束是排他性的。这避免了像试图确定一天中最后一秒的问题。搜索StackOverflow以获取讨论和更多示例。

也许您在数据库中使用的是java.sql.Date兼容的数据类型(仅限日期的值,没有一天中的时间),而不是java.sql.Timestamp兼容的类型。如果是,请使用Joda-Time(或java.time)中的LocalDate类。

在MySQL中,日期时间值的处理非常有限,所以我不确定这个代码示例在这里是否有效。你可能需要调整。这个例子是从我使用Postgres的实际工作中提取出来的,Postgres具有出色的日期时间处理能力。

如果需要将Joda TimeDateTime转换为java。util。互操作性的日期类型,然后简单调用toDate方法。爪哇。时间包有类似的转换方法。搜索堆栈溢出。

严格地说,这个示例不需要使用PreparedStatement。如果(A)您将重复调用此语句并希望获得可能的性能提升,或者(b)您需要避免SQL注入安全风险,则需要PreparedStatement。这里的情况也不是这样,但我发现养成总是使用PreparedStatement的习惯更容易。

以下示例从未经过测试。

ArrayList< Person > list = new ArrayList<>( ); // Goal is to populate this List with Person objects representing rows from the database.

// Purpose: Query database for "person_" rows where the person was born today.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime today = DateTime.now( zone ); // Get the date-time for a particular time zone.
DateTime todayStart = today.withTimeAtStartOfDay( ); // First moment of the day. Usually this is the time 00:00:00.000 but not always.
DateTime tomorrowStart = todayStart.plusDays( 1 );
// We will query by the "Half-Open" approach where the beginning is *inclusive* while the ending is *exclusive*.
java.sql.Timestamp tsStart = new java.sql.Timestamp( todayStart.getMillis( ) );  // Convert a Joda-Time DateTime object to a java.sql.Timestamp object.
java.sql.Timestamp tsStop = new java.sql.Timestamp( tomorrowStart.getMillis( ) );
StringBuilder sql = new StringBuilder( );
sql.append( "SELECT name_ , gender_ , date_of_birth_ " + "\n" );
sql.append( "FROM person_ " + "\n" );
sql.append( "WHERE date_of_birth_ >= ? AND date_of_birth_ < + ? " + "\n" );  // Half-Open query, "[)", beginning is *inclusive* while the ending is *exclusive*.
sql.append( ";" );
try ( Connection conn = DBHelper.instance( ).dataSource( ).getConnection( ) ; // Where "DBHelper" is your own class, to handle particulars for your own database, user account, password.
      PreparedStatement pstmt = conn.prepareStatement( sql.toString( ) ) ; ) {
    pstmt.setTimestamp( 1, tsStart );
    pstmt.setTimestamp( 2, tsStop );
    try ( ResultSet rs = pstmt.executeQuery( ) ; ) {
        int count = 0;  // Count rows extracted from ResultSet.
        while ( rs.next( ) ) {
            count++;
            // Extract fields from this row.
            String personName = rs.getString( "name_" );
            String gender = rs.getString( "gender_" );
            java.sql.Timestamp dateOfBirthTs = rs.getTimestamp( "date_of_birth_" );
            DateTime dateOfBirth = new DateTime( dateOfBirthTs , zone );
            // Instantiate an object to represent this row's data.
            Person person = new Person( personName, gender, dateOfBirth );  // Where "Person" is your own class for representing this data.
            list.add( person );  // Collect these Person objects.
        }
        // If expecting a certain number of rows, verify that number.
        if ( count == 0 ) {
            logger.error( "Found no row in database for date range: " + tsStart + "/" + tsStop + "." );  // I recommend SLF4J & Logback as a logging solution.
        } else if ( count > 1 ) {
            logger.error( "Found more than a single row (" + count + ") in database for date range: " + tsStart + "/" + tsStop + "." );
        }

    }

} catch ( SQLException ex ) {
    logger.error( "SQLException during: " + message + "\n" + ex );
} catch ( Exception ex ) {
    logger.error( "Exception during: " + message + "\n" + ex );
}
司空皓
2023-03-14

根据我对JDBC的记忆,您可以首先设置查询,在您的情况下,这应该相当简单。然后从那里选择行。下面是一个可以处理的示例查询。

SELECT name, gender, birthday FROM people WHERE birthday=CURDATE()

CURDATE()将为您提供当前日期,您可以将其与出生日期进行比较。如果您需要关于如何使用JDBC执行此操作的实际信息,请在问题中指定,或留下评论。

 类似资料:
  • 嗨,我正在创建一个C#程序,用户可以登录和预订目的地的公共汽车座位,我有这个程序,用户可以插入/更新/删除数据,但我希望数据只显示当前登录的数据,这是我的代码下面。 此函数位于主仪表板类中,它在其中向dataviewgrid显示SAITS表 这是我的数据库表,一旦用户登录,我想做的就是按userID显示每个seatID,seatID是这个表的主键,userID是链接到userdata表的外键。

  • 本文向大家介绍Java基于JDBC连接数据库及显示数据操作示例,包括了Java基于JDBC连接数据库及显示数据操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于JDBC连接数据库及显示数据操作。分享给大家供大家参考,具体如下: 1. 导入jdbc包 java要连接MySQL数据库需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar)

  • 问题内容: 在我们的Java应用程序屏幕之一上,我们希望在类似Excel的电子表格组件上显示从Excel文件加载的数据。 该组件必须能够评估电子表格中的公式,并且还必须像加载的Excel文件一样保留常规单元格格式。我们必须能够以编程方式更改电子表格中的单元格值。 自由是一件好事。 您会建议使用任何Java库吗? 问题答案: Apache POI。它是免费的, 但是您不能在此库的帮助下评估形式。 B

  • 本文向大家介绍基于PHP实现数据分页显示功能,包括了基于PHP实现数据分页显示功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了数据分页显示功能的PHP实现代码,供大家参考,具体内容如下 实现代码: 以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 应用程序运行良好...只是数据没有出现...我已经添加了sha用户电子邮件显示在登录后,在登录活动中我已经添加了 但是在实时数据库数据不显示以防万一…我也等了半个小时,尝试了所有的东西…网络也不错。数据库中的数据库规则的数据库图片 mainActivity.java//不能用于单个子级,即firebaseDatabase.getInstance().getReference().child(“aj

  • 本文向大家介绍extjs_02_grid显示本地数据、显示跨域数据,包括了extjs_02_grid显示本地数据、显示跨域数据的使用技巧和注意事项,需要的朋友参考一下 1.显示表格 2.显示本地数据 3.显示跨域jsonp数据