Java 使用SQL数据库中的字符串时出现NullPointerException

Java 使用SQL数据库中的字符串时出现NullPointerException,java,sql,database,string,nullpointerexception,Java,Sql,Database,String,Nullpointerexception,我试图使用从SQL数据库中的行读取的字符串,但当我这样做时,我得到以下NullPointerException: Exception in thread "main" java.lang.NullPointerException at ReadCol.data(ReadCol.java:37) at ReadCol.main(ReadCol.java:50) if(rs.getString(1).equals(array[0]) && rs.getStr

我试图使用从SQL数据库中的行读取的字符串,但当我这样做时,我得到以下NullPointerException:

Exception in thread "main" java.lang.NullPointerException
    at ReadCol.data(ReadCol.java:37)
    at ReadCol.main(ReadCol.java:50)
if(rs.getString(1).equals(array[0]) && 
   rs.getString(7).equals(array[6])){
我的代码如下所示

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");
        }
    }
下面是该表中一行的示例:

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
有什么问题吗?

发生了什么事 问题似乎是在调用
rs.getString(7).equals(…)
rs.getString(1).equals
:这意味着
getString
返回了
null

发生这种情况有两个原因:

  • 您询问的列(在这种情况下为第1列或第7列)不存在

    • (鉴于您的SQL表结构,这里的情况似乎不是这样)
  • 列中必须存储空值,
    getString
    返回
    NULL
    ,这就是在
    NULL
    上调用
    equals
    会引发异常的原因

  • 有关这方面的阅读:

    • 有关
      ResultSet.getString
      返回值的信息:

    如何解决这个问题 首先,要知道是哪列导致了问题,请将两行上的条件分开,然后查看哪一行引发异常:

    Exception in thread "main" java.lang.NullPointerException
        at ReadCol.data(ReadCol.java:37)
        at ReadCol.main(ReadCol.java:50)
    
    if(rs.getString(1).equals(array[0]) && 
       rs.getString(7).equals(array[6])){
    
    如果您的数据库可以保存空值,那么您应该做的是在应用
    equals
    之前对其进行测试:

    if( ( rs.getString(1) == null && array[0] == null
        || rs.getString(1) != null && rs.getString(1).equals(array[0]) )
        && ... // same for 7th column
    
    旁注
  • 为了使代码更容易理解,您可以将要比较的字符串存储在变量中,然后才测试这些变量的条件

  • 最终结果
    字符串何时等于数组?!什么数组?什么是
    rs
    和什么是
    array
    你能给我们看一下所有的代码吗?请发布你最好的尝试。对不起。。。我现在已经更新了代码。@Mee请提供一个,并特别注意“完整”和“可验证”。在数组[6]中,数据是这样的
    Sun 2016.08.14在11:21:43 PM PDT null null-null-Thu 2016.08.18在01:58:34 AM PDT null-Thu 2016.08.18在02:13:26 AM PDT
    它也包含
    null
    。。。。是否因为此
    null
    而发生异常?不客气。我添加了一些关于如何使代码更容易理解的细节