使用Pragma table_info的Nullpointer异常

时间:2014-12-11 18:10:14

标签: java android

在Android项目中我们想要读取数据库的列信息。 我们在PRAGMA表信息中找到了这些示例。 现在我们运行App并且它因nullpointerexcpetion而失败,我们不知道为什么会发生这种情况。 这是我们的准则的一部分。

public String[] getTableColumns(SQLiteDatabase db, String tableName)
    {
        Log.d("ArtDbHandler: ", "getTableColumns Start");
        Cursor cursor = null;
        cursor = db.rawQuery("PRAGMA table_info(" + tableName + ")", null);
        Log.d("ArtDbHandler: ", "getTableColumns cnt:"+cursor.getCount());
        String[] allColumns = new String[cursor.getCount()];
        int i = 1;
        while (!cursor.isAfterLast())
        {
            Log.d("ArtDbHandler: ", "getTableColumns i:"+i);
            String columnName = cursor.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX);
            Log.d("ArtDbHandler: ", "getTableColumns columnName:"+columnName);
            allColumns[i] = columnName;
            ++i;
            cursor.moveToNext();
        }
        cursor.close();
        Log.d("ArtDbHandler: ", "getTableColumns Ende");
        return allColumns;
    }

在LogCat中,我们得到" getTableColumns开始"记录然后抛出异常。 我们使用sqlitedatabase对象和tablename来调用该方法,该表名在我们的DBHandler类中定义。 任何想法?

感谢4位帮助。 吨。

logcat的: 这是logcat:

  •   

    12-11 19:03:56.634:D / onCreate Main:(3325):onCreate 12-11
      19:03:56.634:D / MediumDAO:(3325):MediumDAO Start 12-11 19:03:56.644:   D / MediumDAO:(3325):MediumDAO Ende 12-11 19:03:56.644:
      D / ArtDbHandler:(3325):getTableColumns开始:中12-11   19:03:56.644:D / AndroidRuntime(3325):关闭VM 12-11
      19:03:56.644:W / dalvikvm(3325):threadid = 1:线程退出与
      未捕获的异常(组= 0x40a71930)12-11 19:03:56.664:
      E / AndroidRuntime(3325):致命例外:主12-11 19:03:56.664:
      E / AndroidRuntime(3325):java.lang.RuntimeException:无法启动
      活动
      ComponentInfo {com.example.artdb / com.example.artdb.ArtDbMainActivity}:   java.lang.NullPointerException 12-11 19:03:56.664:
      E / AndroidRuntime(3325):在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)   12-11 19:03:56.664:E / AndroidRuntime(3325):在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)   12-11 19:03:56.664:E / AndroidRuntime(3325):在   android.app.ActivityThread.access $ 600(ActivityThread.java:141)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)
      12-11 19:03:56.664:E / AndroidRuntime(3325):在   android.os.Handler.dispatchMessage(Handler.java:99)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   android.os.Looper.loop(Looper.java:137)12-11 19:03:56.664:
      E / AndroidRuntime(3325):在   android.app.ActivityThread.main(ActivityThread.java:5041)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   java.lang.reflect.Method.invokeNative(Native Method)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   java.lang.reflect.Method.invoke(Method.java:511)12-11 19:03:56.664:
      E / AndroidRuntime(3325):在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   12-11 19:03:56.664:E / AndroidRuntime(3325):在   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   dalvik.system.NativeStart.main(Native Method)12-11 19:03:56.664:
      E / AndroidRuntime(3325):引起:java.lang.NullPointerException
      12-11 19:03:56.664:E / AndroidRuntime(3325):在   com.example.artdb.ArtDbHandler.getTableColumns(ArtDbHandler.java:182)   12-11 19:03:56.664:E / AndroidRuntime(3325):在   com.example.artdb.MediumDAO.setColumns(MediumDAO.java:101)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   com.example.artdb.ArtDbMainActivity.onCreate(ArtDbMainActivity.java:20)   12-11 19:03:56.664:E / AndroidRuntime(3325):在   android.app.Activity.performCreate(Activity.java:5104)12-11
      19:03:56.664:E / AndroidRuntime(3325):在   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)   12-11 19:03:56.664:E / AndroidRuntime(3325):在   android.app.ActivityThread.performLaunchActivity(ActivityThre

ad.java:2144)

2 个答案:

答案 0 :(得分:0)

If (TABLE_INFO_PRAGMA_COLUMNNAME_INDEX != null) String columnName = cursor.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX);

答案 1 :(得分:0)

问题在于db的初始化。在我们进行查询时,数据库未打开。 Thx Elltz和laalto的帮助