为了使我们的代码更有用。在这里,我尝试了许多模式,但没有得到我的结果
然而,我面临着日期变量的问题,如果我传递静态变量,那么它就是正确的输出。但是我想要动态的(用户输入日期)。我不想超过预定的日期。
请给我合适的解决方案。
代码如下:
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日。
1条答案
按热度按时间1mrurvl11#
使用java.time(现代java日期和时间api)进行日期工作。
不要在日期对象、字符串和长度之间来回转换。将用户输入字符串解析为
LocalDate
坚持LocalDate
其余的。你也不需要to_char
在sql中。使用
?
sql中的参数占位符,并替换java中的实际参数。移动
con.close();
在循环之外,或者您可能只能读取第一行。代码:
代码使用以下日期格式化程序:
我还没有安装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的日期时间。