Вот фрагмент моего кода DAO и сервиса:
Код: Выделить всё
@Override
public List getAll() {
ArrayList list = new ArrayList();
String sql = "SELECT * FROM RECEIPT";
Connection conn = DatabaseHelper.getConnect();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
Receipt receipt = Receipt.fromResultSet(rs);
list.add(receipt);
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return list;
}
public static Receipt fromResultSet(ResultSet rs) {
Receipt receipt = new Receipt();
try {
receipt.setId(rs.getInt("RECEIPT_ID"));
receipt.setCreatedDate(rs.getTimestamp("R_DATETIME"));
receipt.setTotal(rs.getDouble("R_TOTAL_PRICE"));
receipt.setReceived(rs.getDouble("R_AMOUNT_RECEIVED"));
receipt.setChange(rs.getDouble("R_CHANGE"));
receipt.setTotalQuantity(rs.getInt("R_QTY"));
receipt.setBranchId(rs.getInt("BRANCH_ID"));
receipt.setUserId(rs.getInt("USER_ID"));
receipt.setCustomerId(rs.getInt("CUSTOMER_ID"));
receipt.setPaymentCode(rs.getInt("PAYMENT_CODE"));
receipt.setPromotionID(rs.getInt("PROMOTION_ID"));
} catch (SQLException ex) {
Logger.getLogger(Receipt.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
return receipt;
}
Код: Выделить всё
public List getReceipts() {
ReceiptDao receiptDao = new ReceiptDao();
return receiptDao.getAll();
}
Я уже пытался изменить настройки локали в моей системе Windows, чтобы проверить, повлияет ли это на вывод, но проблема не устранена.
Поле R_DATETIME в базе данных правильно хранится как TIMESTAMP.
Вопрос:
Почему год отображается неправильно, когда он извлекается в моем Java-приложении? Как я могу гарантировать, что оно отображается как 2024, а не преобразуется в 1481?
- Значение и тип, возвращаемые rs.getTimestamp(" R_DATETIME"):
Метод rs.getTimestamp("R_DATETIME") возвращает объект java.sql.Timestamp. Например, если R_DATETIME в базе данных имеет вид «2024-09-30 12:34:56», это значение, которое следует получить. - Функция setCreatedDate():
Метод setCreatedDate(Timestamp CreateDate) в квитанции класс используется для установки свойства createDate объекта Receipt. Он сохраняет объект Timestamp без каких-либо изменений.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ncorrectly