我写了一个抽象类(ApplicationDataDB)它直接继承自SQLiteOpenHelper,在这里类中我只封装了一个简单的构造方法和关闭数据库的方法;
其他所有的有关数据库操作的子类都直接继承ApplicationDataDB,并直接重写onCreate()和onUpgrade(),并在各自的这两个方法中处理相关操作,如创建表和更新表问题出现了:
假如我有两个子类分别都继承了ApplicationDataDB,它们也都重写了onCreate方法并创建新表,但是执行的之后只有子类1的表成功创建,子类2却没有;
我想是不是因为onCreate方法的执行导致了这个问题的出现,有人说onCreate方法只有在程序初次对数据库操作的时候才会被调用执行,以后就不再被执行了
如果真是以上这种情况,那么就引导出另外的问题出现:
1,难道程序中所有要用到的数据表都要在同一个类中的同一个onCreate方法中被创建么?
如果以上问题被证实,那就又引入一些新的问题:
1,假设我现在有很多张表,至少有10张以上,而每张表至少有20个字段,那么,想想看,在这个类中我需要些多少的重复代码,需要做多少无用的操作,最重要的是,这个类看起来会很难看,很乱;难道就没有别的什么好用的办法么?
至少能够让逻辑分开,每一个数据表对应的类都分来操作,这样不是很清晰,很明了么?不知道是否有人研究过这样的问题,还请赐教

解决方案 »

  1.   

    以前对这块我也非常纠结!
    我记得我的做法是写一个类A继承SQLiteOpenHelper,onCreate()方法中创建数据库,这个方法如果数据库已经存在就不会再去创建了!
    然后又抽象出一层,这层里有个基类B,每个表建立一个操作类继承B,没去继承A,但是基类B里放置A,就是说真正操作数据库的是A,其他每个表的操作类操作数据库时引用基类里的A。
      

  2.   

    试试积累中重写onCreate,在这个里面创建所有的表
      

  3.   

    这个问题我自己解决了。
    说说我的方法,大家看看,给点意见。我的做法依然是我的先前那个方法,一个抽象类继承SQLiteOpenHelper,之后所有要对数据库操作的子类都继承自这个抽象类,并重写onCreate方法,唯一和之前不同的是: 这次我不再一个库中创建多张表,而是每张表都有这自己属于的那个库。
     换句话说,就是我的程序一直在创建库,而非表。这样一来,我就可以逻辑分明,表与表之间互不干扰,代码也清晰明了;不过,我现在担心一个问题,尽管这个问题还没有出现:这样会不会影响将来程序的升级,升级时要对之前数据的处理该怎么办?以上就是我的一些愚见和做法,希望大家都给些意见
      

  4.   

    把ApplicationDataDB设计成单例模式,然后抽象onCreate方法让子类去实现。这只是我的想法,不知道是否可行我想知道楼主用用子类继承ApplicationDataDB,是为了在后续的开发中方便的增加表,还是为了什么
      

  5.   


    嗯,是的,就是为了将来增加一些暂不确定的数据表用于存储一些临时数据或者其他。
    同时也是为了更清晰的直接通过一个类来操作一个单独的数据表,比如:从创建表到对表的增删改查等操作;但是ApplicationDataDB不能设置成单例的,因为它本身是抽象的。
    再者,把它设置成单例和它的子类继承它有什么关系么?