如何在获取数据库中的所有可用表时处理SQLiteException异常?

时间:2011-09-09 04:33:53

标签: android android-layout android-emulator android-widget

我在列表视图中显示了我的数据库中的所有可用表。 但是如果那里没有任何表,那么它将给出numm指针Exception。 代码如下:

public ArrayList<Object> showAllTable()

{       ArrayList tableList = new ArrayList();

  String SQL_GET_ALL_TABLES = "SELECT name FROM sqlite_master WHERE type='table'";
  Cursor cursor = db.rawQuery(SQL_GET_ALL_TABLES, null);


  //////////////////

  if (cursor.moveToLast()) 
  {    

      do 
      {       
          if(cursor.getString(0).equals("android_metadata"))
          {
              //System.out.println("Get Metadata");
              continue;
          }
          else
          {
              tableList.add(cursor.getString(0));
          }
      }
      while (cursor.moveToPrevious());
  }
  ///////////////////////
  cursor.close();

  return tableList;
  }

请帮帮我 我得到的例外情况就像:

09-09 09:57:25.873: ERROR/AndroidRuntime(574): FATAL EXCEPTION: main

09-09 09:57:25.873:ERROR / AndroidRuntime(574):android.database.sqlite.SQLiteException:near“null”:语法错误:create table null(_id整数主键,isbn text not null,title text not null,word text not null,sound text not null,publisher text not null); 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.database.sqlite.SQLiteDatabase.native_execSQL(Native方法) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.quiz.spellingquiz.DBAdapter $ DatabaseHelper.onCreate(DBAdapter.java:68) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.quiz.spellingquiz.DBAdapter.open(DBAdapter.java:88) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.quiz.spellingquiz.MenuPage $ 2.onClick(MenuPage.java:51) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.view.View.performClick(View.java:2408) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.view.View $ PerformClick.run(View.java:8816) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.os.Handler.handleCallback(Handler.java:587) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.os.Handler.dispatchMessage(Handler.java:92) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.os.Looper.loop(Looper.java:123) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.app.ActivityThread.main(ActivityThread.java:4627) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at java.lang.reflect.Method.invokeNative(Native Method) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at java.lang.reflect.Method.invoke(Method.java:521) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at dalvik.system.NativeStart.main(Native Method)

所以,给我解决方法如何解决它。 。 。感谢。

68号线是:

 private static class DatabaseHelper extends SQLiteOpenHelper 
{
    DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        //db.execSQL(DATABASE_CREATE);

//线下面是68             db.execSQL(“create table”+ DATABASE_TABLE +“(_id integer primary key,”                     +“isbn text not null”                     +“标题文字不为空”                     +“word text not null”                     +“声音文字不为空”                     +“发布者文本不为空”;“);         }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) 
    {
        Log.w(TAG, "Upgrading database from version "+oldVersion+" to "+newVersion+", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE);
        onCreate(db);
    }
}    

2 个答案:

答案 0 :(得分:1)

我认为您的DATABASE_TABLE变量为null,这可能就是您获得空指针异常的原因。

基于此错误

09-09 09:57:25.873:ERROR / AndroidRuntime(574):android.database.sqlite.SQLiteException:near“null”:语法错误:create table null(_id整数主键,isbn text not null,title text not null,word text not null,sound text not null,publisher text not null);

答案 1 :(得分:1)

参见示例代码。

public class DBAdapter 
{          
private static final String DATABASE_NAME = "myDatabase.db";
private static final int DATABASE_VERSION = 1;

private static final String USERDETAILS=
    "create table userdetails(usersno integer primary key autoincrement,userid text not null ,username text not null,password text not null,photo BLOB,visibility text not null);";
private final Context context; 

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper 
{
    DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db) 
    {
        db.execSQL(USERDETAILS);

    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
    int newVersion) 
    {
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}    

public DBAdapter open() throws SQLException 
{
    db = DBHelper.getWritableDatabase();
    return this;
}

public void close() 
{
    DBHelper.close();
}
}