如何用java 实现oracle数据--〉sqlserver的功能
本人的想法由于日期类型的原因直接进行操作时不可行的,所以先对oracle的内容把所有日期型字段小于1800-1-1的都转换为1800-1-1,然后进行移动操作。
不过这个方法写出来的程序,总是出错,部分代码如下:
String sTableName = "teacher";
String sTN = sTableName + "temp"; // 临时表名
boolean bFlag = true;
ResultSetMetaData rsmd = rs.getMetaData();
// 判断有无日期型字段
for(int j = 1; j <= rsmd.getColumnCount(); j++){
String sColumnTypeName = rsmd.getColumnTypeName(j).toUpperCase();
if("DATE".equals(sColumnTypeName)){
bFlag = false;
break;
}
}
// 若有则生成一个临时表
if(!bFlag){
sTN += "TEMP";
sSQL = "create table " + sTN + " as select * from " + sTableName;
stmt.executeUpdate(sSQL);
// 构建更新字符串
for(int j = 1; j <= rsmd.getColumnCount(); j++){ ///????问题总是出在这里
String sColumnTypeName = rsmd.getColumnTypeName(j).toUpperCase();
String sColumnName = rsmd.getColumnName(j).toUpperCase();
if("DATE".equals(sColumnTypeName)){
sUpdate += sColumnName + " = (" + "case when "
+ sColumnName + " is null or "
+ sColumnName + " < to_date('1800-1-1', 'YYYY-MM-DD')"
+ "then to_date('1800-1-1', 'YYYY-MM-DD') end),";
}
}
sSQL = "update " + this.sTableName + " set " + sUpdate;
stmt.executeUpdate(sSQL);
}
本人的想法由于日期类型的原因直接进行操作时不可行的,所以先对oracle的内容把所有日期型字段小于1800-1-1的都转换为1800-1-1,然后进行移动操作。
不过这个方法写出来的程序,总是出错,部分代码如下:
String sTableName = "teacher";
String sTN = sTableName + "temp"; // 临时表名
boolean bFlag = true;
ResultSetMetaData rsmd = rs.getMetaData();
// 判断有无日期型字段
for(int j = 1; j <= rsmd.getColumnCount(); j++){
String sColumnTypeName = rsmd.getColumnTypeName(j).toUpperCase();
if("DATE".equals(sColumnTypeName)){
bFlag = false;
break;
}
}
// 若有则生成一个临时表
if(!bFlag){
sTN += "TEMP";
sSQL = "create table " + sTN + " as select * from " + sTableName;
stmt.executeUpdate(sSQL);
// 构建更新字符串
for(int j = 1; j <= rsmd.getColumnCount(); j++){ ///????问题总是出在这里
String sColumnTypeName = rsmd.getColumnTypeName(j).toUpperCase();
String sColumnName = rsmd.getColumnName(j).toUpperCase();
if("DATE".equals(sColumnTypeName)){
sUpdate += sColumnName + " = (" + "case when "
+ sColumnName + " is null or "
+ sColumnName + " < to_date('1800-1-1', 'YYYY-MM-DD')"
+ "then to_date('1800-1-1', 'YYYY-MM-DD') end),";
}
}
sSQL = "update " + this.sTableName + " set " + sUpdate;
stmt.executeUpdate(sSQL);
}
1800-1-1 --〉18000101,然后 对oracle 和 sqlserver 操作时, 格式化为双方对应的日期格式
int x = rsmd.getColumnCount();
然后再做循环