NullPointerException при использовании String из базы данных SQL

java sql database string nullpointerexception

578 просмотра

1 ответ

Я пытаюсь использовать чтение строки из строки в базе данных SQL, но когда я это делаю, я получаю следующее исключение NullPointerException:

Exception in thread "main" java.lang.NullPointerException
    at ReadCol.data(ReadCol.java:37)
    at ReadCol.main(ReadCol.java:50)

Мой код показан ниже ...

public String[] array;    
ResultSet rs=st.executeQuery("select * from ATTENDANCE");

while(rs.next()){
    File file = new File("E:\\eclipse\\workspace\\AutoAttendanceSystem\\res\\AttendanceData.csv");
    List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
    for (String line : lines) {
        array = line.split(",");
        // This is line 37 :
        if(rs.getString(1).equals(array[0]) && rs.getString(7).equals(array[6])){
            JOptionPane.showMessageDialog(null, "Can't Update Because record already exist");
        }
    }

Вот структура таблицы SQL:

CREATE TABLE "ATTENDANCE" ( 
   "ATTENDANT_NAME" VARCHAR2(4000), 
   "ATTENDANT_AGE" NUMBER, 
   "ATTENDANT_CONTACT_NO" NUMBER, 
   "ATTENDANT_DEPARTMENT_NAME" VARCHAR2(4000), 
   "REGISTRATION_NUM" VARCHAR2(50), 
   "ABSENT_PRESENT" VARCHAR2(4000) DEFAULT 'Absent', 
   "ATTENDANCE_TIME_DATE" VARCHAR2(4000) 
)

И вот пример строки в этой таблице:

Sun 2016.08.14 at 11:21:43 PM PDT, null, null, Thu 2016.08.18 at 01:58:34 AM PDT, null, Thu 2016.08.18 at 02:13:26 AM PDT, null

В чем проблема ?

Автор: Farwa Ansari Источник Размещён: 08.11.2019 11:30

Ответы (1)


1 плюс

Решение

Что происходит

Похоже, что проблема в том, когда вы звоните rs.getString(7).equals(...)или rs.getString(1).equals: это означает, что getStringвернулся null.

Это может произойти по 2 причинам:

  1. Столбец, который вы спрашиваете (в этом случае столбец 1 или 7) не существует

    • (здесь не похоже, учитывая структуру таблицы SQL)
  2. значение NULL должно быть сохранено в столбце и getStringвозвращено null, поэтому вызов equalson nullвызывает исключение.

Чтения об этом:

Как решить проблему

Прежде всего, чтобы узнать, какой столбец вызывает проблему, разделите условия на две строки и посмотрите, какая из них выдает исключение:

if(rs.getString(1).equals(array[0]) && 
   rs.getString(7).equals(array[6])){

Если в вашей базе данных нормально хранятся значения NULL, то вам следует проверить ее перед применением equals:

if( ( rs.getString(1) == null && array[0] == null
    || rs.getString(1) != null && rs.getString(1).equals(array[0]) )
    && ... // same for 7th column

Примечания стороны

  1. Вы должны ссылаться на столбцы, используя их имена, а не их индекс.

  2. Чтобы облегчить понимание кода, вы можете хранить строки, которые вы хотите сравнить, в переменных, и только позже проверять условия для этих переменных.

Конечный результат

String databaseResult1, databaseResult2, fileResult1, fileResult2;


// Start looping
// ...

   databaseResult1 = rs.getString("ATTENDANT_NAME");
   fileResult1 = array[0];
   databaseResult2 = rs.getString("ATTENDANCE_TIME_DATE");
   fileResult2 = array[6];

   if(
       ( databaseResult1 == null && fileResult1 == null 
         || databaseResult1 != null && databaseResult1.equals(fileResult1) )
       &&
       ( databaseResult2 == null && fileResult2 == null 
         || databaseResult2 != null && databaseResult2.equals(fileResult2) )
      ...
Автор: Vic Seedoubleyew Размещён: 20.08.2016 04:02
Вопросы из категории :
32x32