Bug 780 - Error occurs in Read.java for monthly_summary
Summary: Error occurs in Read.java for monthly_summary
Status: RESOLVED FIXED
Alias: None
Product: CS3343 Salon Booking System
Classification: Unclassified
Component: hairdresser.monthly_summary.Read (show other bugs)
Version: 2.0
Hardware: PC Mac OS
: Low minor
Assignee: Samuel
URL:
Depends on:
Blocks:
 
Reported: 2023-11-17 12:02 HKT by Samuel
Modified: 2023-11-17 12:33 HKT (History)
1 user (show)

See Also:


Attachments
Screenshot of the error message (805.64 KB, image/jpeg)
2023-11-17 12:02 HKT, Samuel
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Samuel 2023-11-17 12:02:28 HKT
Created attachment 149 [details]
Screenshot of the error message

Description: 

Overview: The main terminal returns java.lang.NullPointerException while running the check monthly summary function page. It happens when the user loads into the page and no records are being displayed on the table.

Steps to Reproduce: 
1. Login as a hairdresser using a hairdresser account
2. Select "Check Commission" on the menu and click in
3. Chcek the main terminal for error messages

Actual Results: The main terminal comes up with error message like java.lang.NullPointerException on line 160 when loading in the page. The application can still run as normal.


Expected Results: The main terminal should not display any error when loading in the page. The application can still run as normal.
Comment 1 Samuel 2023-11-17 12:08:02 HKT
Has recreated the problem and found out that the root error was due to an SQL exception error.

java.sql.SQLSyntaxErrorException: Unknown column 'booking_service' in 'field list'
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
        at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200)
        at utility.DBConnection.query(DBConnection.java:50)
        at hairdresser.monthly_summary.Read.read(Read.java:158)
        at hairdresser.monthly_summary.Read.<init>(Read.java:79)
        at general.HairdresserMainMenu$6.actionPerformed(HairdresserMainMenu.java:88)
        at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
        at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.Component.processEvent(Unknown Source)
        at java.desktop/java.awt.Container.processEvent(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
java.lang.NullPointerException: Cannot invoke "java.sql.ResultSet.next()" because "rs" is null
        at hairdresser.monthly_summary.Read.read(Read.java:160)
        at hairdresser.monthly_summary.Read.<init>(Read.java:79)
        at general.HairdresserMainMenu$6.actionPerformed(HairdresserMainMenu.java:88)
        at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
        at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.Component.processEvent(Unknown Source)
        at java.desktop/java.awt.Container.processEvent(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Comment 2 Samuel 2023-11-17 12:19:48 HKT
By tracking the error code and the line of code it points to, the cause of this problem is that there are extra fields being selected on the SQL query, and somehow this field does not exist in the table.

sql = "SELECT user_name, booking_hairdresser_id, COUNT(booking_id), SUM(booking_grandtotal), booking_service FROM bookings, users WHERE "+
        "bookings.booking_hairdresser_id = users.user_id AND "+
        "booking_date LIKE '" + selectedYear + "-" + selectedMonth + "%' AND " + 
        "booking_status = 'Completed' AND " + 
        "booking_hairdresser_id = '" + UserInfo.userID +"'" + 
        "GROUP BY booking_hairdresser_id";

The booking_service is not a valid field that can be selected inside the database table.

After removing this field from the SQL query, the error message would be removed when loading on the "Check Commission" page.