【发布时间】:2018-11-20 19:13:35
【问题描述】:
我在通过 java 使用 Oracle 时从数据库中获取日期时遇到问题。如果我在 Java 中使用它:
SELECT *
from HA2_BOOKINGS
WHERE ROOM like 'R1'
AND BEGINNING >= (TO_TIMESTAMP('2018-06-11 15:11:43.208', 'YYYY-MM-DD HH24:MI:SSXFF'))
AND END <= (TO_TIMESTAMP('2018-06-11 15:11:43.208', 'YYYY-MM-DD HH24:MI:SSXFF'))
我收到 oracle-01830 错误,但是当我在 oracle 本身中使用完全相同的东西时,代码可以正常工作。有谁知道为什么?
我的java代码:
public Collection<Booking> getAllBookingsForRoomInPeriod(Room r, String startDate, String endDate) {
Collection<Booking> bookingsForRoomInPeriod = new ArrayList<Booking>();
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm");
parser.setLenient(false);
Date dateBeginning = new Date();
Date dateEnd = new Date();
try {
dateBeginning = parser.parse(startDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dateEnd = parser.parse(endDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Timestamp tsBeginning = new Timestamp(dateBeginning.getTime());
Timestamp tsEnd = new Timestamp(dateEnd.getTime());
bookingList.clear();
Connection aCon = Persistence.getConnection();
ResultSet resultSet = null;
// Raeume lesen
try {
resultSet = Persistence.executeQueryStatement(aCon, "SELECT * from HA2_BOOKINGS WHERE ROOM like '" + r.getRoomNr() + "' AND BEGINNING >= (TO_TIMESTAMP('" + tsBeginning + "', 'YYYY-MM-DD HH24:MI')) AND END <= (TO_TIMESTAMP('" + tsEnd + "', 'YYYY-MM-DD HH24:MI'))");
while (resultSet.next()) {
Booking a = new Booking();
a.setRoom(resultSet.getString("ROOM"));
a.setUsername(resultSet.getString("USERNAME"));
a.setDescription(resultSet.getString("DESCRIPTION"));
a.setBeginning(resultSet.getTimestamp("BEGINNING"));
a.setEnd(resultSet.getTimestamp("END"));
this.bookingList.add(a);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
Persistence.closeConnection(aCon);
}
System.out.println(bookingList);
return bookingList;
}
【问题讨论】:
-
你在 Java 中使用这个字符串?或者您实际上是使用准备好的语句还是使用字符串构建语句?
-
@a_horse_with_no_name 我添加了我的 java 代码
-
啊哈。使用准备好的语句。不要从字符串构建语句。使用 setTimestamp 设置您的时间戳,您将不需要任何
TO_TIMESTAMP或格式。 -
@RealSkeptic 我也添加了我的 java 代码
标签: java sql oracle timestamp ora-01830