Как обработать исключение SQLiteException при получении всех доступных таблиц в базе данных? - PullRequest
0 голосов
/ 09 сентября 2011

Я показываю все доступные таблицы из моей базы данных в виде списка. Но если там нет никаких таблиц, тогда будет указатель 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: ОШИБКА / AndroidRuntime (574): android.database.sqlite.SQLiteException: около «ноль»: синтаксическая ошибка: создать нулевой номер таблицы (первичный ключ целого числа _id, текст isbn не ноль, заголовок текст не нулевой, слово текст не нулевой, звуковой текст не нулевой, текст издателя не нулевой); 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): в android.database.sqlite.SQLiteDatabase.native_execSQL (собственный метод) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): в android.database.sqlite.SQLiteDatabase.execSQL (SQLiteDatabase.java:1727) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): в com.quiz.spellingquiz.DBAdapter $ DatabaseHelper.onCreate (DBAdapter.java:68) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): в android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:106) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на com.quiz.spellingquiz.DBAdapter.open (DBAdapter.java:88) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на com.quiz.spellingquiz.MenuPage $ 2.onClick (MenuPage.java:51) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на android.view.View.performClick (View.java:2408) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на android.view.View $ PerformClick.run (View.java:8816) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на android.os.Handler.handleCallback (Handler.java:587) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на android.os.Handler.dispatchMessage (Handler.java:92) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на android.os.Looper.loop (Looper.java:123) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на android.app.ActivityThread.main (ActivityThread.java:4627) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на java.lang.reflect.Method.invokeNative (собственный метод) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): в java.lang.reflect.Method.invoke (Method.java:521) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): в dalvik.system.NativeStart.main (собственный метод)

Итак, дайте мне решение, как решить это. , , Спасибо.

Линия на 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 («создать таблицу» + DATABASE_TABLE + «(целочисленный первичный ключ _id») + "isbn 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 ]

1 голос
/ 09 сентября 2011

см. Пример кода.

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();
}
}
1 голос
/ 09 сентября 2011

Я думаю, что ваша переменная DATABASE_TABLE равна нулю, и, вероятно, именно поэтому вы получаете исключение нулевого указателя.

на основании этой ошибки

09-09 09: 57: 25.873: ОШИБКА / AndroidRuntime (574): android.database.sqlite.SQLiteException: близка к «нулю»: синтаксическая ошибка: создать нулевое значение таблицы (первичный ключ целого числа _id, текст isbn не равен нулю, заголовок текст не нулевой, слово текст не нулевой, звуковой текст не нулевой, текст издателя не нулевой);

...