Java NullPointerException—从数据库检索数据并存储到数组时发生数据库锁定问题

Java NullPointerException—从数据库检索数据并存储到数组时发生数据库锁定问题,java,android,mysql,database,sqlite,Java,Android,Mysql,Database,Sqlite,我试图从数据库中的PersonDOB列中检索日期列表(字符串格式)。然后我遇到了数据库锁定问题。我已经为数据库声明了open()和close()方法。即使我犯了这些错误。我无法理解,为什么我会犯这个错误。 我读过一些文章,比如 不仅如此,我还尝试了其他问题和文章中给出的解决方案。但我无法找到适合我的环境的适当解决方案。 在我的整个代码中,我只使用了一次写操作。因此,不存在数据损坏的问题。 这是我从数据库中获取数据的代码 public String[] getDataInArray() { /

我试图从数据库中的PersonDOB列中检索日期列表(字符串格式)。然后我遇到了数据库锁定问题。我已经为数据库声明了open()和close()方法。即使我犯了这些错误。我无法理解,为什么我会犯这个错误。 我读过一些文章,比如

不仅如此,我还尝试了其他问题和文章中给出的解决方案。但我无法找到适合我的环境的适当解决方案。 在我的整个代码中,我只使用了一次写操作。因此,不存在数据损坏的问题。 这是我从数据库中获取数据的代码

public String[] getDataInArray() { // get data for list and return in array form
        // TODO Auto-generated method stub
        SQLiteDatabase myDB;
        String[] return_columns;
         try {

              myDB=this.openDataBase();       
              String DOB = "PersonDOB";
            String[] columms = new String[]{ DOB };



            Cursor c = myDB.query("Persons", columms, null, null, null, null, null);

            int iDOB = c.getColumnIndex(DOB);

            int rowcount = 0;
              return_columns = new String[c.getCount()];
            for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
            {
                return_columns[rowcount] = c.getString(iDOB);
                rowcount = rowcount + 1;
            }



                  if(c != null)
                 {
                     myDB.close();
                     c.close();
                  }          


                  }catch(SQLException sqle){

                  throw sqle;

                  }
         for (int i = 0;i<return_columns.length;i++)
            {
                                     Log.v("DOB", return_columns[i]); //I am not
 getting this log message in the logcat.
            }
        return return_columns;
        }

提前感谢。

关闭数据库
myDB.close()不足以避免锁定。在关闭数据库之前或光标操作完成时,需要关闭用于
数据库操作的
光标
。如果您使用的是
线程,请确保它们也必须正确关闭。

关闭数据库
myDB.close()不足以避免锁定。在关闭数据库之前或光标操作完成时,需要关闭用于
数据库操作的
光标
。如果您使用的是
线程
s,请确保它们也必须正确关闭。

感谢您的回复@Avadhani Y,我现在也关闭了光标。请查看我的更新代码。但我在日志中得到了相同的错误。@nki数据库关闭后,如何关闭光标?将
c.close()
放在
myDB.close()之前
我已经按照你说的做了更改。但也得到了同样的错误。我放置了
c.close()
before
myDB.close()。这在当时对我起了作用。您知道,发生此错误的其他原因可能是什么吗?可能是没有正确关闭
线程
游标
数据库对象
,。。。请参阅此文档:感谢您的回复@Avadhani Y,我现在也关闭了光标。请查看我的更新代码。但我在日志中得到了相同的错误。@nki数据库关闭后,如何关闭光标?将
c.close()
放在
myDB.close()之前
我已经按照你说的做了更改。但也得到了同样的错误。我放置了
c.close()
before
myDB.close()。这在当时对我起了作用。您知道,发生此错误的其他原因可能是什么吗?可能是没有正确关闭
线程
游标
数据库对象
,。。。请参阅本文档:不确定这是否能解决您的问题,但如果光标为空,则数据库将永远不会关闭。尝试将myDB.close()移动到if(c!=null)下面ok@UngureanuLiviu,我会尝试。不确定这是否能解决您的问题,但如果光标为null,则数据库永远不会关闭。尝试将myDB.close()移动到if(c!=null)ok@UngureanuLiviu下面,我会尝试。
09-19 15:58:00.140: W/System.err(7115): java.lang.NullPointerException
09-19 15:58:00.140: W/System.err(7115):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
09-19 15:58:00.140: W/System.err(7115):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
09-19 15:58:00.200: W/System.err(7115):     at com.example.fromstart.adapter.open(adapter.java:30)
09-19 15:58:00.210: W/System.err(7115):     at com.example.fromstart.adapter.getDataInArray(adapter.java:222)