2011-02-17 38 views
26

我想在使用sqlite的Android手机上创建本地数据库。SQLiteOpenHelper无法调用onCreate?

我有一个帮助类,如下所示,用于创建数据库并提供“帮助”。

我想在我的代码的主要部分创建这个类的对象,它也创建数据库和表。

问题:

每当我创建一个类的对象,它似乎并没有被要求在助手的onCreate方法。我认为这是应该发生的。我认为onCreate基本上是该类的构造函数。 (我相信我错了)

  • 那么,为什么它不调用onCreate方法?
  • 或者我如何获得它来创建数据库和表格,我在哪里创建类的对象?
  • 如果这不是一个好方法,那么更好的方法是做什么?

public class SmartDBHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "smart_lite_db.db"; 
    private static final int DATABASE_VERSION = 2; 
    private static final String NOTIFY_TABLE_NAME = "user_notify_data"; 
    private static final String HR_TABLE_NAME = "user_hr_data"; 
    private static final String NOTIFY_TABLE_CREATE = 
     "CREATE TABLE " + NOTIFY_TABLE_NAME + 
     " (counter INTEGER PRIMARY KEY, " + 
     "userresponse INTEGER, " + 
     "notifytime INTEGER);"; 
    private static final String DATA_TABLE_CREATE = 
     "CREATE TABLE " + HR_TABLE_NAME + 
     " (counter INTEGER PRIMARY KEY, " + 
     "hr INTEGER, " + 
     "act INTEGER, " + 
     "timestamp INTEGER);";  

    public SmartDBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     Log.v("smartdbhelper", "before creation"); 
     db.execSQL(NOTIFY_TABLE_CREATE); 
     Log.v("smartdbhelper", "middle creation"); 
     db.execSQL(DATA_TABLE_CREATE); 
     Log.v("smartdbhelper", "after creation"); 
    } 


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 

} 

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener { 
    private SmartDBHelper dBHelper; 
    public void onCreate(Bundle savedInstanceState) { 
     //where i am wanting to create the database and tables 
     dBHelper = new SmartDBHelper(getContext()); 
    } 
} 

回答

62

onCreate不是数据库类的构造函数。只有在您尝试打开不存在的数据库时才会调用它。 要打开/创建你需要添加一个调用这些方法中的一个数据库:

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener { 
    private SmartDBHelper dBHelper; 
    public void onCreate(Bundle savedInstanceState) { 
     //where i am wanting to create the database and tables 
     dBHelper = new SmartDBHelper(getContext()); 
     // open to read and write 
     dBHelper.getWritableDatabase(); 
     // or to read only 
     // dBHelper.getReadableDatabase(); 
    } 
} 

这是一个有点大,但这里是我的DatabaseAdapter你可以看看:http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.java

14

你必须调用getWritableDatabase()getReadableDatabase()

+0

测试现在,我相信你是对的。我刚刚检查了Android的例子,发现。我一定是一直在看它,会让你知道它是怎么回事。谢谢 – prolink007 2011-02-17 01:44:55

+0

+1:这工作。谢谢 – prolink007 2011-02-17 02:24:19

相关问题