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. BeRoTinyPascal

    https://github.com/BeRo1985/berotinypascal https://github.com/thachngopl/berotinypascal

  2. statspack系列6

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-6/ 作者:Jonathan Lewis 下面是一段时间以前网 ...

  3. 【转】提供android 5.0 AOSP源码下载

    http://blog.csdn.net/innost/article/details/41148335 android-5.0.tar.gz 115网盘礼包码:5lbcl16a1k7q http:/ ...

  4. JavaScript修改表中的内容

    例子: <?php ?> <html> <head> <meta http-equiv="Content-Type" content=&q ...

  5. python 零散记录(四) 强调字典中的键值唯一性 字典的一些常用方法

    dict中键只有在值和类型完全相同的时候才视为一个键: mydict = {1:1,':1} #此时mydict[1] 与 mydict['1']是两个不同的键值 dict的一些常用方法: clear ...

  6. Problem 2214 Knapsack problem 福建第六届省赛

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2214 题目大意:给你T组数据,每组有n个物品,一个背包容量B,每件有体积和价值.问你这个背包容纳的物品最大价值 ...

  7. poj 3237 Tree(树链剖分,线段树)

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 7268   Accepted: 1969 Description ...

  8. Linux I2C设备驱动编写(三)-实例分析AM3359

    TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1版本规格 支持标准模式(100K bits/s)和快速模式(400K bits/s) 多路接收.发送模式 ...

  9. Spark-Java版本WordCount示例

    首先创建Spark的Maven工程,我这里使用的是Eclipse. 1.编写WordCountApp代码 package com.mengyao.spark.java.core; import jav ...

  10. spring官方文档中文版

    转 http://blog.csdn.net/tangtong1/article/details/51326887 spring官方文档:http://docs.spring.io/spring/do ...