2016-03-08 67 views
0

我有数据库模式:Android应用程序没有创建数据库

public class Database extends SQLiteOpenHelper { 

    public static final String TAG = Database.class.getSimpleName(); 

    public static final String DATABASE_NAME = "Database"; 
    public static final int DATABASE_VERSION = 1; 

    SaveSharedPreference preference = new SaveSharedPreference(); 


    public Database(Context context) { 
     super(context, Environment.getExternalStorageDirectory() + "/sdcard/" + DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    static SQLiteDatabase database = null; 
    static Database instance = null; 

    public static SQLiteDatabase getDatabase() { 
     if (null == database) { 
      database = instance.getWritableDatabase(); 
     } 
     return database; 
    } 

    public static void init(Context context) { 
     if (null == instance) { 
      instance = new Database(context); 
     } 
    } 

    public static void deactivate() { 
     if (null != database && database.isOpen()) { 
      database.close(); 
     } 
     database = null; 
     instance = null; 
    } 

    // NON-CUSTOM COLUMNS 
    public static final String _ID = "id"; 
    public static final String CREATE_DT = "create_dt"; 
    public static final String UPDATE_DT = "update_dt"; 

    // EVENT TABLE 
    public static final String TABLE_NAME_EVENTS = "events"; 
    public static final String EVENT_SYNC_ID = "event_sync_id"; 
    public static final String EVENT_CREATOR_SYNC_ID = "event_creator_sync_id"; 
    public static final String EVENT_PREFERENCES = "event_preferences"; 


    public static final String TABLE_EVENTS_CREATE = "CREATE TABLE " 
      + TABLE_NAME_EVENTS + " (" 
      + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + EVENT_SYNC_ID + " VARCHAR(255) NOT NULL, " 
      + EVENT_CREATOR_SYNC_ID + " VARCHAR(255) NOT NULL, " 
      + EVENT_PREFERENCES + " VARCHAR(8000) NOT NULL, " 
      + CREATE_DT + " VARCHAR(255), " 
      + UPDATE_DT + " VARCHAR(255))"; 

    // DROPPING TABLE: Should do instead of truncate if need to refresh all data/ 
    public static final String DROP_TABLE_PREFIX = "DROP TABLE IF EXISTS "; 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     // CREATE TABLES DEFINED ABOVE 
     db.execSQL(DROP_TABLE_PREFIX + TABLE_NAME_EVENTS); 

     onCreate(db); 
    } 

和MyApplicaton类,来创建应用程序启动数据库:

public void onCreate() { 
    super.onCreate(); 

    Database DB = new Database(this); 
    SQLiteDatabase db = DB.getWritableDatabase(); 

} 

我已经使用上述代码试图,但看着文件路径/sdcard/,没有创建数据库。

这个数据库如何被创建并确保它被创建?

+0

你打算在设备或模拟器上看到你的数据库? – malli

+0

我在'Database'类的'onCreate()'方法中看不到'TABLE_EVENTS_CREATE'的'execSQL()'。它是否存在于你的实际代码中?没有它,数据库将不会被创建。 –

回答

1
You can only create database in onCreate() Method 

@Override 
    public void onCreate(SQLiteDatabase db) { 

     // CREATE TABLES DEFINED ABOVE 
     db.execSQL(TABLE_NAME_EVENTS); 

     onCreate(db); 
    } 

for Dropping table use 

@Override 
    public void onUpgrade(SQLiteDatabase db) { 

     // DroppingTABLES DEFINED ABOVE 
     db.execSQL(DROP_TABLE_PREFIX); 

     onCreate(db); 
    } 
相关问题