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;
}

插入ts以及判断列是否存在(支持多数据库)的更多相关文章

  1. .NET 百万级 大数据插入、更新 ,支持多种数据库

    功能介绍  (需要版本5.0.44) 大数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数据库 ...

  2. ASP.NET 为GridView添加序号列,且支持分页连续累计显示

    为GridView添加序号列,且支持分页连续累计显示,废话不多说,直接上代码: <%@ Page Language="C#" AutoEventWireup="tr ...

  3. DataGridView绑定数据库,取得的数据插入到DataGridView指定列(一)

    实现: 点击button1,从数据库中获得数据,指定数据库的某列数据插入到DataGridView指定列 一.双击button1进入事件代码 private void button1_Click(ob ...

  4. sql 判断表是否存在,判断列是否存在

    判断表是否存在: 语法: SELECT * FROM dbo.SysObjects where id = object_id(N'表名') 例子: SELECT * FROM dbo.SysObjec ...

  5. VBA小功能集合-判断列内是否有重复值

    1.判断列内是否有重复值: Dim arrT As Range Dim rng As Range Set arrT = Range("A:A")'判读A列单元格 For Each ...

  6. FreeSql (七)插入数据时忽略列

    var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...

  7. FreeSql (八)插入数据时指定列

    插入数据时指定列,和忽略列对应,未被指定的列将被忽略. var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Passwor ...

  8. python numpy.array插入一行或一列

    numpy.array插入一行或一列 import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.array([[0,0,0]] ...

  9. CYQ.Data 支持 PostgreSQL 数据库

    前言: 很久之前,就有同学问我CYQ.Data能不能支持下PostgreSQL,之后小做了下调查,发现这个数据库用的人少,加上各种因素,就一直没动手. 前两天,不小心看了一下Github上的消息: 看 ...

随机推荐

  1. csu 10月 月赛 D 题 CX and girls

    Description CX是要赶去上课,为了不迟到必须要以最短的路径到达教室,同时CX希望经过的路上能看到的学妹越多越好.现在把地图抽象成一个无向图,CX从1点出发,教室在N号点,告诉每个点上学妹的 ...

  2. 裸眼3D立体显示技术原理详解

    众所周知,现实世界是一个三维空间,除去时间这一维度,现实世界是由长度.宽度和高度三个维度组成,我们每天就生活在这个三维世界中,而现有的显示设备大多数都只能显示二维信息,并不能带给人真实的三维感觉.为了 ...

  3. 能让你成为更优秀程序员的10个C语言资源

    能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...

  4. oracle稳定执行计划1

    稳定执行计划 1 策略: Oracle的sql 执行计划在一些场景下会发生变化,导致系统会发生不可知的情况,影响系统的稳定性,特别是关键业务的sql. 比如下面的场景: 统计信息过老,重新收集了统计信 ...

  5. String 类;Math 类;

    static void Main(string[] args)        {            while (true)            {               /* strin ...

  6. 【转】我的电脑最近忽然开不了机,启动修复也无法修复,win7系统。开机的时候如果不点启动修复直接正常启动

    原文网址:http://wenda.haosou.com/q/1356139178064356 你好,电脑开机蓝屏主要是:“磁盘有错误”或“非正常关机”引起!这是解决方法:(原创,引用请说明作者:力王 ...

  7. C# Login方法

    public static bool User_Login(string url, string uname, string password, out string[] userInfo) { st ...

  8. bootstrap easyUI 的选型

    最近开始搭建新的项目后台,开始在Bootstrap 和 EasyUI两个框架上选型,个人还是倾向于Bootstrap,毕竟这个响应式效果是个趋势,并且可以自动兼容不同的屏幕分辨率和设备.

  9. HDU 1078 FatMouse and Cheese (记忆化搜索+dp)

    详见代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <memory. ...

  10. basic mongodb

    basic mongodb */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola," ...