android数据库更新
2015-10-22 17:48
441 查看
最近在写一个android开发框架的时候用到了ormlite,也稍微封装了一下。但是如果已经存在一个数据库,我要在其中一个表中插入某一列可怎么办呢?不止如此,我想删除某一列,修改某一列的数据类型,修改某个表的名字,这些需求在数据库需要经常修改字段的时候经常用到。而google一下发现其实数据库的一些语句其实是可以做到的,就是alter。
下面贴上相关代码片段:
这一部分的代码放在DatabaseHelper里面,这个类继承自Ormlite的OrmLiteSqliteOpenHelper类。下面展示如何调用:
其中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类似。另外需要在添加了相关字段之后才能添加或者更新相关数据,不然的话报错出异常。对于大数据量或者多个表的操作要开启事务处理,提高操作效率。
下面贴上相关代码片段:
/** * 更新升级数据库,包括删除,添加列,修改列的数据类型,修改表的名字 * * @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类似。另外需要在添加了相关字段之后才能添加或者更新相关数据,不然的话报错出异常。对于大数据量或者多个表的操作要开启事务处理,提高操作效率。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件