java .lang.NullPointerException при внесении необходимых изменений в код (Java Netbeans IDE 7.4 и JDK 1.7) - PullRequest
0 голосов
/ 16 марта 2020

Мой начальный фрагмент кода следующий:

public class JFrameAllMarks extends javax.swing.JFrame {


        public JFrameAllMarks() {
        initComponents();
        setDefaultCloseOperation(JFrameAllMarks.DISPOSE_ON_CLOSE);
        showMark();

    }

 public ArrayList<Marks> markList1()
        {
            ArrayList<Marks> marksList = new ArrayList<>();

             try {   
                DBConnection obj = new DBConnection();

                String selectquery = "SELECT * FROM Marks";

                ResultSet rs = obj.getdata(selectquery);

                Marks objmk;

                while(rs.next())
                {
                    objmk = new Marks(rs.getString("StudentID"), rs.getString("StudentName"), rs.getString("SubjectID"), rs.getString("SubjectName"), rs.getString("BatchID"), rs.getInt("Marks"));
                    marksList.add(objmk);
                }
            } 
            catch (SQLException ex) {
                Logger.getLogger(JFrameAllMarks.class.getName()).log(Level.SEVERE, null, ex);
            }

            return marksList;
        }


 public void showMark()
 {
     ArrayList<Marks> list = markList1();

     DefaultTableModel dtm = (DefaultTableModel)jTableAllMarks.getModel();

     Object[] row = new Object[6];

     for(int i=0; i<list.size();i++)
     {
         row[0] = list.get(i).getStudentID();
         row[1] = list.get(i).getStudentName();
         row[2] = list.get(i).getSubjectID();
         row[3] = list.get(i).getSubjectName();
         row[4] = list.get(i).getBatchID();
         row[5] = list.get(i).getMarks();

         dtm.addRow(row);

     }
 }

И требуемый класс java для ArrayList в приведенном выше коде.

package AllMarksList;

/**
 *
 * @author Admin
 */
class Marks {
    private String StudentID, StudentName, SubjectID, SubjectName, BatchID;
    private int Marks;

    public Marks (String StudentID, String StudentName, String SubjectID, String SubjectName, String BatchID, int Marks)
    {
        this.StudentID=StudentID;
        this.StudentName=StudentName;
        this.SubjectID=SubjectID;
        this.SubjectName=SubjectName;
        this.BatchID=BatchID;
        this.Marks=Marks;

     }


    public String getStudentID()
    {
        return StudentID;
    }

    public String getStudentName()
    {
        return StudentName;
    }

    public String getSubjectID()
    {
        return SubjectID;
    }

    public String getSubjectName()
    {
        return SubjectName;
    }

    public String getBatchID()
    {
        return BatchID;
    }

    public int getMarks()
    {
        return Marks;
    }

}

Вышеуказанный код выполнен правильно , Он показал все данные, которые находились в таблице базы данных «Метки».

Итак, я скопировал и вставил этот и соответствующий класс, чтобы создать другой класс JFrame и java, который функционирует точно так же. Соответствующие изменения были внесены, чтобы иметь отличительные изменения между исходным и скопированным классами JFrames и java.

В этом новом JFrame я хотел извлечь из базы данных только те данные, которые содержали определенный идентификатор студента. Итак, я изменил запрос на выборку следующим образом.

String selectquery = "SELECT * FROM Marks WHERE StudentID=S001";

И при выполнении этого нового кода я получил следующие ошибки.

SEVERE: null
java.lang.NullPointerException
    at StudentMarks.JFrameStudentAllMarks.markList1(JFrameStudentAllMarks.java:47)
    at StudentMarks.JFrameStudentAllMarks.showMark1(JFrameStudentAllMarks.java:63)
    at StudentMarks.JFrameStudentAllMarks.<init>(JFrameStudentAllMarks.java:30)
    at StudentMarks.JFrameStudentAllMarks$3.run(JFrameStudentAllMarks.java:224)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745)
    at java.awt.EventQueue.access$300(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:706)
    at java.awt.EventQueue$3.run(EventQueue.java:704)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:715)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Попытался внести изменения в строки кода , выявленные по ошибке. Но не повезло в решении этой проблемы.

Буду очень признателен за вашу помощь.

1 Ответ

0 голосов
/ 23 марта 2020

Поскольку вы создали запрос SQL из строки Java, вам необходимо использовать синтаксис SQL. SQL использует одинарные кавычки для разделения строки, поэтому вам необходимо добавить их в свой запрос вручную.

Это необходимая строка:

String selectquery = "SELECT * FROM Marks WHERE StudentID='S001'";
...