Skip to content
This repository was archived by the owner on Jun 9, 2024. It is now read-only.

Commit b4dd5e4

Browse files
committed
Move Fine Report to stored proc
1 parent c270b30 commit b4dd5e4

2 files changed

Lines changed: 13 additions & 16 deletions

File tree

src/main/java/EJB/FineOracleBean.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import Objects.loanModel;
55
import jakarta.ejb.EJB;
66
import jakarta.ejb.Stateless;
7+
import oracle.jdbc.OracleTypes;
78

89
import java.sql.*;
910
import java.time.LocalDate;
@@ -242,27 +243,22 @@ public void markAsPaid(int fineId) {
242243
}
243244
}
244245

245-
public ArrayList<fineModel> geFineReportForCustomer(int customerId, Date startDate, Date endDate) {
246-
String query = "SELECT f.FINE_ID, f.FINE_AMOUNT, f.FINE_DATE, f.PAID, " +
247-
"b.TITLE, u.LAST_NAME, u.FIRST_NAME, " +
248-
"a.FIRST_NAME AS AUTHOR_FIRST_NAME, a.LAST_NAME AS AUTHOR_LAST_NAME " +
249-
"FROM fines f " +
250-
"INNER JOIN loans l ON l.LOAN_ID = f.LOAN_ID " +
251-
"INNER JOIN books b ON b.BOOK_ID = l.BOOK_ID " +
252-
"INNER JOIN AUTHORS a ON a.AUTHOR_ID = b.AUTHOR_ID " +
253-
"INNER JOIN LIBRARY_USERS u ON u.USER_ID = l.USER_ID " +
254-
"WHERE l.USER_ID = ? AND f.FINE_DATE >= ? AND f.FINE_DATE <= ?";
246+
public ArrayList<fineModel> getFineReportForCustomer(int customerId, Date startDate, Date endDate) {
247+
String query = "{CALL GET_FINE_REPORT_FOR_CUSTOMER(?, ?, ?, ?)}";
255248

256249
ArrayList<fineModel> fineList = new ArrayList<>();
257250

258251
try (Connection con = oracleClientProviderBean.getOracleClient();
259-
PreparedStatement pstmt = con.prepareStatement(query)) {
252+
CallableStatement cstmt = con.prepareCall(query)) {
253+
254+
cstmt.setInt(1, customerId);
255+
cstmt.setObject(2, new java.sql.Date(startDate.getTime()));
256+
cstmt.setObject(3, new java.sql.Date(endDate.getTime()));
257+
cstmt.registerOutParameter(4, OracleTypes.CURSOR);
260258

261-
pstmt.setInt(1, customerId);
262-
pstmt.setObject(2, new java.sql.Date(startDate.getTime()));
263-
pstmt.setObject(3, new java.sql.Date(endDate.getTime()));
259+
cstmt.execute();
264260

265-
try (ResultSet rs = pstmt.executeQuery()) {
261+
try (ResultSet rs = (ResultSet) cstmt.getObject(4)) {
266262
while (rs.next()) {
267263
fineModel fine = new fineModel();
268264
fine.setFineId(rs.getLong("FINE_ID"));
@@ -283,4 +279,5 @@ public ArrayList<fineModel> geFineReportForCustomer(int customerId, Date startDa
283279

284280
return fineList;
285281
}
282+
286283
}

src/main/java/Endpoints/fineReport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t
3131
Date[] convertedDate = getFirstAndLastDayOfMonth(date);
3232

3333
PrintWriter out = response.getWriter();
34-
ArrayList<fineModel> result = fineBean.geFineReportForCustomer(customerId, convertedDate[0], convertedDate[1]);
34+
ArrayList<fineModel> result = fineBean.getFineReportForCustomer(customerId, convertedDate[0], convertedDate[1]);
3535

3636
Gson gson = new Gson();
3737
String jsonArray = gson.toJson(result);

0 commit comments

Comments
 (0)