2 hcg 21 hcg_21 于 2012.11.22 15:54 提问

创建数据库后oncreate方法没被调用

我使用helper创建一个新数据库。按照文档所说的,当数据库一创建,oncreate方法就会被调用,但是这个方法没有被准确的调用。
下面是我要实现的代码。

OpenHelper(Context context) 
  {

     super(context, "examplee.db", null, 1 );
     SQLiteDatabase sqlite = null;       
      Log.w(TAG, "Openhelp database, ");
      sqlite =  context.openOrCreateDatabase("examplee.db", Context.MODE_PRIVATE, null );
      Log.e ( TAG,"SQ lite database object "+sqlite );                
  }

 public void onOpen(SQLiteDatabase db)
 {
     Log.e ( TAG,"On open called ");
 }


  @Override
  public void onCreate(SQLiteDatabase db) 
  {
      Log.w(TAG, " On create ");
      //db.execSQL(sql);
     //db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT)");
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
  {
     Log.w(TAG, "Upgrading database, this will drop tables and recreate.");
     //db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
     //onCreate(db);
  }

1.除了使用helper,还有别的方法能创建数据库吗?
2.在数据库创建中,什么样的回调函数会被调用然后再被销毁?

3个回答

xiaoyan_12
xiaoyan_12   2012.11.23 10:21
已采纳

下面非常详细的描述如何从模拟器中删除数据库文件(和在一个真正的android手机上调试是非常相似的)。
1.运行模拟器。如果有问题,那么你可以忽略其余的帮助信息!
2.根据您的操作系统,停止一个命令行接口。
3.执行命令:“adb shell”。然后进入Android Debug Bridge;命令会变成像一个简单的英镑符号。不用管原来的操作系统,现在是一个简化的unix操作系统。
4.现在在模拟器中,输入命令‘ls -l'来验证是否在根目录(你将会看到一些非常像一个unix根目录系统的东西)。
5.切换目录到存储的数据库文件。假设你的程序在包com.sillynames。myprogram5中运行,数据库文件被称为“myblackbook.db”。你会发现这个文件在目录: /data/data/com.sillynames.myprogram5/databases/myblackbook.db中。
6.一旦在那个目录中,就可以通过“rm myblackbook.db”删除数据库。

hcg_21
hcg_21 你的这个方法真的很详细,谢谢!
大约 5 年之前 回复
JKINGCL
JKINGCL   2012.11.26 17:17

你说的问题有可能是已经存在了这个数据库,所以数据库的onceat()方法不会再执行了,你在你的文件目录下看看是否有examplee.db这个文件呢!有的话,你手动删除了,然后再运行试一试,可能是以前运行过了,所以没有新建了!

hcg_21
hcg_21 谢谢你的回答,细心很重要啊!
大约 5 年之前 回复
qq437125754
qq437125754   2017.04.11 17:11

没有,但是不执行oncreate

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!