您的位置:首页 > 数据库

Generator数据库的管理者

2015-11-10 19:26 323 查看
一、
Generator继承于LitePalBase,用来动态关联数据库。创建或者更新litepal.xml里面需要映射的类。基类主要的任务是从映射类里面读取属性,并且格式化数据类型。具体的分析工作将在子类里面完成。

private
Collection<TableModel>
mTableModels;
private
Collection<AssociationsModel>
mAllRelationModels;
这边有两个属性是用来记录所有的表和关联表。

1、执行sql语句
protected
void
execute(String[] sqls, SQLiteDatabase db)
子类可以调用这个方法取执行sql语句,或者重写execute方法实现自己的逻辑。

2、添加关联/更新关联
private
static
void
addAssociation(SQLiteDatabase db,
boolean
force)
private
static
void
updateAssociations(SQLiteDatabase db)

3、更新表
private
static
void
upgradeTables(SQLiteDatabase db)

[align=left]4、创建表[/align]
private
static
void
create(SQLiteDatabase db,
boolean
force)

[align=left]5、删除表[/align]
private
static
void
drop(SQLiteDatabase db)

[align=left]6、创建数据库[/align]
static
void
create(SQLiteDatabase db)

[align=left]7、更新数据库[/align]
static
void
upgrade(SQLiteDatabase db)

[align=left]二、AssociationCreator[/align]
[align=left]继承于Generator,处理表关联。[/align]

[align=left]1、添加或更新表关联[/align]

void
addOrUpdateAssociation(SQLiteDatabase db,
boolean
force)
void
addAssociations(Collection<AssociationsModel> associatedModels, SQLiteDatabase db, boolean
force)

[align=left]2、生成SQL语句[/align]

String generateCreateTableSQL(String tableName, Map<String, String> columnsMap, boolean
autoIncrementId)
String generateDropTableSQL(String tableName)
String generateAddColumnSQL

3、添加外键
void
addForeignKeyColumn(String tableName, String associatedTableName,
[align=left] String tableHoldsForeignKey, SQLiteDatabase db)[/align]

[align=left]三、Creator[/align]
[align=left]继承于AssociationCreator。用来创建表。它将自动创建一个TableMoel对应的表。如果数据库中已经有存在的同名表,LitePal将会先删除在创建。[/align]

[align=left]1、根据TableModel创建表[/align]
void
createOrUpgradeTable(SQLiteDatabase db,
boolean
force)

[align=left]2、获取创建表的SQL语句[/align]
String[] getCreateTableSQLs(TableModel tableModel, SQLiteDatabase db,
boolean
force)

[align=left]3、获取删除表的SQL语句[/align]
[align=left]String generateDropTableSQL(TableModel tableModel)[/align]

[align=left]四、AssiciationUpdater[/align]
[align=left]继承于Creator,用来更新表关联。[/align]

[align=left]1、处理外键列[/align]
[align=left]List<String> getForeignKeyColumns(TableModel tableModel)[/align]
boolean
isForeignKeyColumn(TableModel tableModel, String columnName)
void
removeForeignKeyColumns
List<String> findForeignKeyToRemove(TableModel
tableModel)

[align=left]2、删除给定表名的表[/align]
void
dropTables(List<String> dropTableNames, SQLiteDatabase db)

[align=left]五、Dropper[/align]
[align=left]继承于AssociationUpdater,用来处理表删除操作。[/align]

[align=left]1、删除映射列表中已经不存在的表。[/align]
void
dropTables()

[align=left]2、遍历需要删除的表[/align]
[align=left]List<String> findTablesToDrop()[/align]

[align=left]3、判断一个表是否需要删除[/align]
boolean
shouldDropThisTable(String tableName,
int
tableType)

[align=left]六、Upgrader[/align]
继承于AssociationUpdater,用来处理表更新操作。第一步是删除Model类中已经没有,但是数据库中海油的列。然后添加新增的列。最后再检查记录是否需要改变。

private
void
upgradeTable() {
removeColumns(findColumnsToRemove(),
mTableModel.getTableName());
[align=left] addColumn(findColumnsToAdd());[/align]
[align=left] changeColumnsType(findColumnTypesToChange());[/align]

[align=left] }[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: