1:增加ts.dr字段,先判断ts.dr字段是否存在,其中ts字段插入的是日期,默认值为当前插入的时间,dr字段是数值型,默认值为0

     * 增加ts/dr字段
*
* @param tableList
*/
private void addTSAndDRColumn(List<String> tableList) {
// 先判断是否有ts,dr列 String dsname = getDsName();
boolean addTS = false;
boolean addDR = false;
List<String> sqlList = new ArrayList<String>();
for (int i = ; i < tableList.size(); i++) {
String addSql = null;
String tableName = tableList.get(i);
addTS = !isColumnExist(dsname, tableName, "ts");
addDR = !isColumnExist(dsname, tableName, "dr");
if (addTS) {
if (addDR) {
addSql = addTSAndDR(tableName);
} else {
addSql = addTS(tableName);
}
} else {
if (addDR) {
addSql = addDR(tableName);
}
}
if (!StringUtils.isEmpty(addSql)) {
sqlList.add(addSql);
} }
String[] sqls = sqlList.toArray(new String[]);
if (!ArrayUtils.isEmpty(sqls)) {
SqlExecAction_Client.execBatch(dsname, sqls);// 批量处理
} } /**
* 判断列是否存在。思路:针对sqlserver/oracle/postgrel做了特殊处理,其他类型的数据库,则按照字段执行查询,如果出错,则说明字段不存在
*
* @param dsname
* 数据源
* @param tableName
* 表名
* @param column
* 列名
* @return
*/
private boolean isColumnExist(String dsname, String tableName, String column) {
boolean isExist = true;
DbType dbType = SmartUtilities.getDbType(dsname);
if (dbType == DbType.SQLSERVER || dbType == DbType.ORACLE
|| dbType == DbType.POSTGRESQL) {
return isColumnExist(dsname, tableName, column, dbType);
} else {
try {
String sql = "select count(" + column + ") from " + tableName;
SqlExecAction_Client.execQuery(dsname, sql,
new ResultSetProcessor() {
private static final long serialVersionUID = -3528176693847689283L; @Override
public Object handleResultSet(ResultSet rs)
throws SQLException {
while (rs.next()) {
return rs.getInt();
}
return ;
} });
} catch (Exception e) {// 如果有异常,则说明字段不存在
AppDebug.error(e);
isExist = false;
}
} return isExist;
} private boolean isColumnExist(String dsname, String tableName,
String column, DbType dbType) {
String sql = null;
if (dbType == DbType.SQLSERVER) {
sql = "select count(*) from syscolumns where id=object_id('"
+ tableName.toLowerCase() + "') and name='" + column + "'";
} else if (dbType == DbType.ORACLE) {
sql = "select count(*) from cols where table_name=upper('" + tableName
+ "') and column_name=upper('" + column + "')";
} else if (dbType == DbType.POSTGRESQL) {
sql = "select count(*) from pg_attribute where attname='"
+ column
+ "' and attrelid=(select oid from pg_class where relname='"
+ tableName.toLowerCase() + "')";
}
Integer count = (Integer) SqlExecAction_Client.execQuery(dsname, sql,
new ResultSetProcessor() {
private static final long serialVersionUID = -3528176693847689283L; @Override
public Object handleResultSet(ResultSet rs)
throws SQLException {
while (rs.next()) {
return rs.getInt();
}
return ;
} });
int icount = count.intValue();
return (icount != ); } /**
* @param tableName
* @return
*/
private String addTSAndDR(String tableName) {
String sql = "alter table " + tableName
+ " add (ts CHAR(19),dr numeric(10,0) DEFAULT 0)";
String dsName = FileStorageConfigFactory.getBaseConfig().getDsName();
DbType dbType = SmartUtilities.getDbType(dsName);
if (dbType == DbType.SQLSERVER) {
sql = "alter table "
+ tableName
+ " add ts NCHAR(19) COLLATE Chinese_PRC_CI_AS DEFAULT CONVERT(nchar(19),GETDATE(),20),dr SMALLINT DEFAULT 0";
} else if (dbType == DbType.ORACLE) {
sql = "alter table "
+ tableName
+ " add (ts CHAR(19) DEFAULT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),dr numeric(10,0) DEFAULT 0)";
} else if (dbType == DbType.DB2) {
sql = "alter table "
+ tableName
+ " add COLUMN ts CHAR(19) DEFAULT char(current timestamp,'yyyy-mm-dd hh24:mi:ss')"
+ " add COLUMN dr SMALLINT DEFAULT 0)";
} else if (dbType == DbType.POSTGRESQL) {
sql = "alter table "
+ tableName
+ " add ts CHAR(19) DEFAULT to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss'),add dr numeric(10,0) DEFAULT 0"; }
return sql;
} private String addTS(String tableName) {
String sql = "alter table " + tableName + " add ts CHAR(19)";
String dsName = FileStorageConfigFactory.getBaseConfig().getDsName();
DbType dbType = SmartUtilities.getDbType(dsName);
if (dbType == DbType.SQLSERVER) {
sql = "alter table "
+ tableName
+ " add ts NCHAR(19) COLLATE Chinese_PRC_CI_AS DEFAULT CONVERT(nchar(19),GETDATE(),20)";
} else if (dbType == DbType.ORACLE) {
sql = "alter table "
+ tableName
+ " add ts CHAR(19) DEFAULT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')";
} else if (dbType == DbType.DB2) {
sql = "alter table "
+ tableName
+ " add COLUMN ts CHAR(19) DEFAULT char(current timestamp,'yyyy-mm-dd hh24:mi:ss')";
} else if (dbType == DbType.POSTGRESQL) {
sql = "alter table "
+ tableName
+ " add ts CHAR(19) DEFAULT to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss')"; }
return sql;
} private String addDR(String tableName) {
String sql = "alter table " + tableName
+ " add dr numeric(10,0) DEFAULT 0";
String dsName = FileStorageConfigFactory.getBaseConfig().getDsName();
DbType dbType = SmartUtilities.getDbType(dsName);
if (dbType == DbType.SQLSERVER) {
sql = "alter table " + tableName + " add dr SMALLINT DEFAULT 0";
} else if (dbType == DbType.DB2) {
sql = "alter table " + tableName
+ " add COLUMN dr SMALLINT DEFAULT 0)";
}
return sql;
}

最新文章

  1. Openvpn 撤销签署的证书(删除用户)
  2. 分享公司DAO层动态SQL的一些封装
  3. CentOS 系统目录解析
  4. dedecms /plus/feedback.php SQL Injection Vul
  5. HDU 3911 Black And White(线段树区间合并+lazy操作)
  6. [踏得网]HTML5在线教程阅读进度记录
  7. C语言:文件操作
  8. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载
  9. 转载最佳JQuery学习网站
  10. 获取iframe 内元素的方法
  11. OS概论2
  12. new的原理
  13. sql时间比较
  14. MySQL常用配置参数
  15. 计算出前N项的数据
  16. img和父容器之间有间隙的问题
  17. 商业智能(BI)选型手册(转载)
  18. Android/Linux Thermal框架分析及其Governor对比
  19. web 攻击靶机解题过程
  20. c# AOP编程:Context与方法拦截

热门文章

  1. Multi-Die系统介绍
  2. 【Xamarin挖墙脚系列:Xamarin.Android的API设计准则】
  3. CollapsingToolbarLayout
  4. 使用Eclipse创建模板并格式化代码
  5. 【转】命令行使用7zip
  6. 【Android 复习】:AndroidManifest.xml 文件详解
  7. GIS大讲堂内所有讲座的索引(更新至2008年6月26日)(转)
  8. HDU- Who Gets the Most Candies?
  9. CMD删除Mysql 服务
  10. Oracle11g客户端for centos 5.5安装文档