2010-06-18 1 views
0

Каждый раз, когда я использую db, его значение null, и я просто не получаю его.Android sqlight - всегда null

Я использую этот код для SQL, когда у меня есть запрос:

public class GameSQLHelper { 
    static final String[] COUNTRIES = new String[] { 
     "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra" 
     }; 

    private static final String DB_PATH = "/countryCityGame/databases/"; 
    private static final String DATABASE_NAME = "events.db"; 
    private static final int DATABASE_VERSION = 1; 
    private final Context mCtx; 
    // Table name 
    public static final String TABLE = "myDataBase"; 

    // Columns 
    public static final String LETTER = "letter"; 
    public static final String TYPE = "type"; 
    public static final String VALUE = "value"; 

    //my database 
    SQLiteDatabase myDataBase; 

    private static class DatabaseHelper extends SQLiteOpenHelper { 
     private static final String TAG = null; 

     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
       String sql = "create table " + TABLE + "(" + BaseColumns._ID 
       + " integer primary key autoincrement, " + LETTER + " text not null, " 
       + TYPE + " text not null," + VALUE + " text not null);"; 
       Log.d("EventsData", "onCreate: " + sql); 
       db.execSQL(sql); 
       insertValuesToDB(db); 

      } 
      private void insertValuesToDB(SQLiteDatabase db) { 


       if (db == null){ 

       } 
       else{ 
       db.execSQL("INSERT INTO " 

               + TABLE 

               + " ("+LETTER+","+ TYPE +"," + VALUE +")" 

               + " VALUES ('A', 'country', 'Angola');"); 

        ContentValues initialValues = new ContentValues(); 


        for (int i = 0 ; i < COUNTRIES.length ; i++){ 

         Character tmp = (Character)COUNTRIES[i].charAt(0); 

         initialValues.put(VALUE, COUNTRIES[i]); 
         initialValues.put(TYPE, "country"); 
         initialValues.put(LETTER,tmp.toString(tmp)); 

        db.insert(TABLE, null, initialValues); 
        } 
       } 
      } 
      @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 notes"); 
       onCreate(db); 
      } 

     } 

     /** 
     * Constructor - takes the context to allow the database to be 
     * opened/created 
     * 
     * @param ctx the Context within which to work 
     */ 
     public GameSQLHelper(Context ctx) { 
      this.mCtx = ctx; 
     } 





     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     if (oldVersion >= newVersion) 
      return; 

     String sql = null; 
     if (oldVersion == 1) 
      sql = "alter table " + TABLE + " add note text;"; 
     if (oldVersion == 2) 
      sql = ""; 

     Log.d("EventsData", "onUpgrade : " + sql); 
     if (sql != null) 
      db.execSQL(sql); 
    } 

    public void openDataBase() throws SQLException{ 

      //Open the database 
      String myPath = DB_PATH + DATABASE_NAME; 
      myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 

     } 


     public boolean existInDataBase(String serchStr){ 

      Cursor c = null ; 
      try{ 
      openDataBase(); 
      c = myDataBase.query(true, TABLE, new String[] {TYPE 
        }, VALUE + "=" + serchStr, null, 
        null, null, null, null); 
      } 
      catch(Exception e){ 
       Log.d("sqlExacption", e.getMessage()); 

      } 
      if (c == null) 
       return false; 

      return true; 
     } 

} 

Всякий раз, когда я называю этот класс (я провести instace его инициализирован: mDbHelper = new GameSQLHelper(this);, где это действие)

I всегда получаю мой mDbHelper как null, как я могу его изменить? Это мой первый опыт работы с SQL за пределами платформы mysql, поэтому я вроде как понимаю проблемы концепции, а пример notpad для Android не помог мне.

ответ

0

Не открывать базу данных через SQLiteDatabase#openDatabase. Вместо этого создайте экземпляр своего DatabaseHelper и вызовите на нем getWritableDatabase.

+0

не могли бы вы показать небольшой пример, объясняющий вышеизложенное. thanx –

+0

Может кто-нибудь, пожалуйста, покажите мне пример? –

 Смежные вопросы

  • Нет связанных вопросов^_^