您的位置:首页 > 移动开发 > Android开发

android数据库更新

2015-10-22 17:48 441 查看
最近在写一个android开发框架的时候用到了ormlite,也稍微封装了一下。但是如果已经存在一个数据库,我要在其中一个表中插入某一列可怎么办呢?不止如此,我想删除某一列,修改某一列的数据类型,修改某个表的名字,这些需求在数据库需要经常修改字段的时候经常用到。而google一下发现其实数据库的一些语句其实是可以做到的,就是alter。

下面贴上相关代码片段:

/**
* 更新升级数据库,包括删除,添加列,修改列的数据类型,修改表的名字
*
* @author admin
* @date 2015-10-22 上午11:07:57
* @param updateType 要更新的类型 , 直接查看这个类的public静态变量
* @param tableName 要添加表的名字
* @param columnName 要添加列的名字
* @param dataType 所属字段的数据类型"String" , "Integer" , "Boolean"
*/
public void addColumn(String tableName ,String columnName , String dataType){
String tempDataType = null;
String defaultValue = null;
if(!StringUtil.isEmpty(tableName, columnName) && dataType != null){
if(dataType.equals("String")){
tempDataType = "String";
defaultValue = null;
}else if(dataType.equals("Integer")){
tempDataType = "Integer";
defaultValue = "0";
}else if(dataType.equals("Boolean")){
tempDataType = "Boolean";
defaultValue = "0";
}
}
if(!StringUtil.isEmpty(tempDataType)){
getWritableDatabase().execSQL("alter table " + tableName + " add " + columnName + " " + tempDataType + " default " + defaultValue);
}
}

/**
* 删除表中的某一列
*
* @author admin
* @date 2015-10-22 下午4:00:41
* @param tableName
* @param columnName
*/
public void deleteColumn(String tableName , String columnName){
if(!StringUtil.isEmpty(tableName, columnName)){
getWritableDatabase().execSQL("alter table " + tableName + " drop column " + columnName);
}
}
/**
* 修改表中某一列的数据类型
*
* @author admin
* @date 2015-10-22 下午4:00:58
* @param tableName
* @param columnName
* @param tempDataType
*/
public void changeColumnType(String tableName , String columnName , String tempDataType){
if(!StringUtil.isEmpty(tableName) && !StringUtil.isEmpty(columnName, tempDataType)){
getWritableDatabase().execSQL("alter table " + tableName + " modify " + columnName + " " + tempDataType);
}
}

/**
* 修改某个表的名字
*
* @author admin
* @date 2015-10-22 下午4:01:15
* @param oldTableName
* @param newTableName
*/
public void changeTableName(String oldTableName , String newTableName){
if(!StringUtil.isEmpty(oldTableName, newTableName)){
getWritableDatabase().execSQL("alter table " + oldTableName + " rename to " + newTableName);
}
}

这一部分的代码放在DatabaseHelper里面,这个类继承自Ormlite的OrmLiteSqliteOpenHelper类。下面展示如何调用:

try {
DataTestDaoImpl daoImpl = new DataTestDaoImpl(this);
daoImpl.addColumn("data_test", "qin", "String");
DataTest test = new DataTest();
test.setId("126");
test.setDate("" + new Date());
test.setTime("" + new Date());
test.setName("chuck chan");
test.setQin("yan");

Transaction trans = daoImpl.getTransaction();
trans.begainTransaction();
daoImpl.saveOrUpdate(test);
trans.commit();
trans.endTransaction();
} catch (Exception e) {
e.printStackTrace();
}

其中DataTestDaoImpl主要用来操作DataTest这张表,所有这张表的操作都会在这里类里面实现,具体代码如下:

public class DataTestDaoImpl extends DaoImpl<DataTest, String>{
private Context mContext;
public DataTestDaoImpl(Context context){
super(DataTest.class , MyDatabaseHelper.getInstance(context));
mContext = context;
}

public void addColumn(String tableName ,String columnName , String dataType){
MyDatabaseHelper.getInstance(mContext).addColumn(tableName, columnName, dataType);
}
}表的相关操作与添加column类似。另外需要在添加了相关字段之后才能添加或者更新相关数据,不然的话报错出异常。对于大数据量或者多个表的操作要开启事务处理,提高操作效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 数据库