如何存储用户输入日期并在sql查询中传递它们

ewm0tg9j  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(315)

为了使我们的代码更有用。在这里,我尝试了许多模式,但没有得到我的结果
然而,我面临着日期变量的问题,如果我传递静态变量,那么它就是正确的输出。但是我想要动态的(用户输入日期)。我不想超过预定的日期。
请给我合适的解决方案。
代码如下:

Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:VASVMT","scott","tiger");

        Statement stmt=con.createStatement();

        Scanner sc=new Scanner(System.in);
        System.out.println("Enter DOB (dd-mm-yyyy) format");
        String td=sc.next();
        SimpleDateFormat date1=new SimpleDateFormat("dd-MM-yyyy");
        System.out.println(date1);
        java.util.Date tdd=date1.parse(td);
        System.out.println(tdd);
        long ms=tdd.getTime();
        System.out.println(ms);
        java.sql.Date dttt=new java.sql.Date(ms);
        System.out.println(dttt);

        String sql="select * from tbl_transaction_new where to_char(date_time,'dd-mm-yyyy')='dttt'";
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()) {

               System.out.print(" NAME: "+rs.getString("messgae"));

               System.out.print(" Date: "+rs.getDate("date_time"));

               System.out.println();

    con.close();
    }

我的sql表——比如
消息(列)和日期\时间(列,数据类型-日期)。。日期\时间列中的值类似于2021年7月5日、2021年7月8日、2021年1月1日。

1mrurvl1

1mrurvl11#

使用java.time(现代java日期和时间api)进行日期工作。
不要在日期对象、字符串和长度之间来回转换。将用户输入字符串解析为 LocalDate 坚持 LocalDate 其余的。你也不需要 to_char 在sql中。
使用 ? sql中的参数占位符,并替换java中的实际参数。
移动 con.close(); 在循环之外,或者您可能只能读取第一行。
代码:

String userInput = "06-09-1987"; // = sc.next();
    LocalDate dob = LocalDate.parse(userInput, DTF);

    String sql = "select * from tbl_transaction_new where date_time = ?;";
    PreparedStatement stmt = con.prepareStatement(sql);
    stmt.setObject(1, dob);
    ResultSet rs = stmt.executeQuery();
    while(rs.next()) {
        System.out.print(" NAME: " + rs.getString("messgae"));
        System.out.print(" Date: " + rs.getObject("date_time", LocalDate.class));
        System.out.println();
    }
    con.close();

代码使用以下日期格式化程序:

private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern("dd-MM-uuuu");

我还没有安装oracle,所以没有机会测试自己。我已经编译了代码。请原谅,如果有一个错别字没有被发现在编译。
请注意,我也是如何检索 LocalDate 而不是老式的 java.sql.Date 从结果集中。经过 LocalDate 或其他java.time类型与sql之间的转换需要jdbc 4.2。如今,我们几乎所有人都有这样的经历。
编辑:您进一步询问:
我对表格数据有问题。。如果列(日期\时间)值类似于05-jul-201(类型-日期)。在这种情况下,我们需要使用to_char变量或not(?) 05-JUL-2021 是oracle响应查询显示日期的方式。它与日期在数据库内部的存储方式无关。您和数据库都可以更轻松地比较两个日期,而无需将它们转换为 char 第一。所以不,不要使用 to_char (未经测试再次说)。

链接

oracle教程:说明如何使用java.time的日期时间。

相关问题