欢迎大家指出不足之处!/** 提供基本的面向对象的数据库操作(基于驼峰命名法Camel-Case)
* (支持的Oracle数据类型:VARCHAR2、NVARCHAR2、CHAR、NCHAR、FLOAT、NUMBER、DATE、TIMESTAMP)
* (支持的Java数据类型:ava.lang.Byte、java.lang.Short、java.lang.Integer、java.lang.Long、java.lang.Float、java.lang.Double、java.sql.Date、java.util.Date、java.sql.Timestamp)
* @author yangxuan
* @time 2011-11-11上午11:11:11
*/
public class BaseDaoFactory{
private Logger logger = Logger.getLogger(this.getClass());
private Map<String,Set<String>> tableColumns = new Hashtable<String, Set<String>>();
private Map<String,String> columnsType = new Hashtable<String, String>();
private Map<String,Set<String>> tablePrimaryKeys = new Hashtable<String,Set<String>>();
private String prefix = "jk_";
private static BaseDaoFactory baseDaoFactory = new BaseDaoFactory();
private BaseDaoFactory() {
}
public static BaseDaoFactory getInstance(){
if(null == baseDaoFactory){
baseDaoFactory = new BaseDaoFactory();
}
return baseDaoFactory;
}
/**
* 保存
* @param pojo 保存的对象实例
* @param conn 数据库连接对象
* @return boolean 是否成功,true成功:false不成功
*/
public boolean saveObject(Object pojo,Connection conn) {
PreparedStatement st = null;
try{
String tableName = this.getTableName(pojo);
StringBuffer prefix = new StringBuffer();
prefix.append("insert into "+tableName+"(");
StringBuffer suffix = new StringBuffer();
suffix.append(" values(");
List<String> columns = getTableColumns(pojo,conn);
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
String columnValue = this.convertToSqlValue(pojo, columnName, conn);
prefix.append(columnName);
prefix.append(", ");
suffix.append(columnValue);
suffix.append(", ");
}
if(columns.size()>0){
prefix = prefix.delete(prefix.length()-2,prefix.length());
suffix = suffix.delete(suffix.length()-2,suffix.length());
}
prefix.append(")");
suffix.append(")");
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
st.executeUpdate();
return true;
}catch(Exception e){
logger.error("database insert row error!", e);
return false;
}finally{
this.close(null, st, null);
}
}
/**
* 更新
* @param conditionPojo 更新之前的实例
* @param conditionNullValue 是否将空值加入where判断条件,true加入:false不加入
* @param valuePojo 更新之后的实例
* @param updateNullValue 是否将空值也更新到数据库,true更新:false不更新
* @param conn 数据库连接对象
* @return boolean 是否成功,true成功:false不成功
*/
public boolean updateObject(Object conditionPojo,boolean conditionNullValue,Object valuePojo,boolean updateNullValue,Connection conn) {
PreparedStatement st = null;
try{
if(!conditionPojo.getClass().getName().equals(valuePojo.getClass().getName())){
logger.error("the two objects's class name is not the same one!");
return false;
}
String tableName = this.getTableName(conditionPojo);
StringBuffer prefix = new StringBuffer();
prefix.append("update "+tableName+" set ");
List<String> columns = this.getTableColumns(conditionPojo,conn);
boolean has = false;
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
String columnValue = this.convertToSqlValue(valuePojo, columnName, conn);
if(updateNullValue){
if(null != columnValue){
prefix.append(columnName);
prefix.append(" = ");
prefix.append(columnValue);
prefix.append(", ");
has = true;
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
prefix.append(columnName);
prefix.append(" = ");
prefix.append(columnValue);
prefix.append(", ");
has = true;
}
}
}
if(has){
prefix = prefix.delete(prefix.length()-2,prefix.length());
}
List <String> primaryKeys = this.getTablePrimaryKeys(conditionPojo, conn);
if(primaryKeys.size() == 0){
primaryKeys = columns;
}
StringBuffer suffix = new StringBuffer();
suffix.append(" where ");
has = false;
for (int i = 0; i < primaryKeys.size(); i++) {
String columnName = primaryKeys.get(i);
String columnValue = this.convertToSqlValue(conditionPojo, columnName, conn);
if(conditionNullValue){
if(null != columnValue){
if("NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" is ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}else{
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}
if(has){
suffix = suffix.delete(suffix.length()-5,suffix.length());
}
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
st.executeUpdate();
return true;
}catch(Exception e){
logger.error("database update row or rows error!", e);
return false;
}finally{
this.close(null, st, null);
}
}
/**
* 删除
* @param pojo 删除的对象实例
* @param conditionNullValue 是否将空值加入where判断条件,true加入:false不加入
* @param conn 数据库连接对象
* @return boolean 是否成功,true成功:false不成功
*/
public boolean deleteObject(Object pojo,boolean conditionNullValue,Connection conn) {
PreparedStatement st = null;
try{
String tableName = this.getTableName(pojo);
StringBuffer prefix = new StringBuffer();
prefix.append("delete from "+tableName);
StringBuffer suffix = new StringBuffer();
suffix.append(" where ");
List <String> primaryKeys = this.getTablePrimaryKeys(pojo, conn);
if(primaryKeys.size() == 0){
primaryKeys = this.getTableColumns(pojo, conn);
}
boolean has = false;
for (int i = 0; i < primaryKeys.size(); i++) {
String columnName = primaryKeys.get(i);
String columnValue = this.convertToSqlValue(pojo, columnName, conn);
if(conditionNullValue){
if(null != columnValue){
if("NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" is ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}else{
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}
if(has){
suffix = suffix.delete(suffix.length()-5,suffix.length());
}
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
st.executeUpdate();
return true;
}catch(Exception e){
logger.error("database delete row or rows error!", e);
return false;
}finally{
this.close(null, st, null);
}
}
/**
* 查询
* @param pojo 查询的对象实例
* @param conditionNullValue 是否将空值加入where判断条件,true加入:false不加入
* @param conn 数据库连接对象
* @return List 对象实例的集合
*/
public List<Object> findObject(Object pojo,boolean conditionNullValue,Connection conn) {
PreparedStatement st = null;
ResultSet rs = null;
List<Object> list = new ArrayList<Object>();
try{
String tableName = this.getTableName(pojo);
StringBuffer prefix = new StringBuffer();
prefix.append("select ");
StringBuffer suffix = new StringBuffer();
suffix.append(" where ");
List <String> columns = this.getTableColumns(pojo, conn);
boolean has = false;
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
prefix.append(columnName);
prefix.append(", ");
String columnValue = this.convertToSqlValue(pojo, columnName, conn);
if(conditionNullValue){
if(null != columnValue){
if("NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" is ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}else{
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}
if(columns.size()>0){
prefix = prefix.delete(prefix.length()-2,prefix.length());
}
prefix.append(" from "+ tableName);
if(has){
suffix = suffix.delete(suffix.length()-5,suffix.length());
}else{
suffix.setLength(0);
}
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
rs = st.executeQuery();
while(rs.next()){
Object obj = Class.forName(pojo.getClass().getName()).newInstance();
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
Object objValue = rs.getObject(columnName);
if(null != objValue){
this.setPojoValue(obj, columnName, objValue, conn);
}
}
list.add(obj);
}
}catch(Exception e){
logger.error("database find row or rows error!", e);
}finally{
this.close(null, st, null);
}
return list;
}
}
* (支持的Oracle数据类型:VARCHAR2、NVARCHAR2、CHAR、NCHAR、FLOAT、NUMBER、DATE、TIMESTAMP)
* (支持的Java数据类型:ava.lang.Byte、java.lang.Short、java.lang.Integer、java.lang.Long、java.lang.Float、java.lang.Double、java.sql.Date、java.util.Date、java.sql.Timestamp)
* @author yangxuan
* @time 2011-11-11上午11:11:11
*/
public class BaseDaoFactory{
private Logger logger = Logger.getLogger(this.getClass());
private Map<String,Set<String>> tableColumns = new Hashtable<String, Set<String>>();
private Map<String,String> columnsType = new Hashtable<String, String>();
private Map<String,Set<String>> tablePrimaryKeys = new Hashtable<String,Set<String>>();
private String prefix = "jk_";
private static BaseDaoFactory baseDaoFactory = new BaseDaoFactory();
private BaseDaoFactory() {
}
public static BaseDaoFactory getInstance(){
if(null == baseDaoFactory){
baseDaoFactory = new BaseDaoFactory();
}
return baseDaoFactory;
}
/**
* 保存
* @param pojo 保存的对象实例
* @param conn 数据库连接对象
* @return boolean 是否成功,true成功:false不成功
*/
public boolean saveObject(Object pojo,Connection conn) {
PreparedStatement st = null;
try{
String tableName = this.getTableName(pojo);
StringBuffer prefix = new StringBuffer();
prefix.append("insert into "+tableName+"(");
StringBuffer suffix = new StringBuffer();
suffix.append(" values(");
List<String> columns = getTableColumns(pojo,conn);
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
String columnValue = this.convertToSqlValue(pojo, columnName, conn);
prefix.append(columnName);
prefix.append(", ");
suffix.append(columnValue);
suffix.append(", ");
}
if(columns.size()>0){
prefix = prefix.delete(prefix.length()-2,prefix.length());
suffix = suffix.delete(suffix.length()-2,suffix.length());
}
prefix.append(")");
suffix.append(")");
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
st.executeUpdate();
return true;
}catch(Exception e){
logger.error("database insert row error!", e);
return false;
}finally{
this.close(null, st, null);
}
}
/**
* 更新
* @param conditionPojo 更新之前的实例
* @param conditionNullValue 是否将空值加入where判断条件,true加入:false不加入
* @param valuePojo 更新之后的实例
* @param updateNullValue 是否将空值也更新到数据库,true更新:false不更新
* @param conn 数据库连接对象
* @return boolean 是否成功,true成功:false不成功
*/
public boolean updateObject(Object conditionPojo,boolean conditionNullValue,Object valuePojo,boolean updateNullValue,Connection conn) {
PreparedStatement st = null;
try{
if(!conditionPojo.getClass().getName().equals(valuePojo.getClass().getName())){
logger.error("the two objects's class name is not the same one!");
return false;
}
String tableName = this.getTableName(conditionPojo);
StringBuffer prefix = new StringBuffer();
prefix.append("update "+tableName+" set ");
List<String> columns = this.getTableColumns(conditionPojo,conn);
boolean has = false;
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
String columnValue = this.convertToSqlValue(valuePojo, columnName, conn);
if(updateNullValue){
if(null != columnValue){
prefix.append(columnName);
prefix.append(" = ");
prefix.append(columnValue);
prefix.append(", ");
has = true;
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
prefix.append(columnName);
prefix.append(" = ");
prefix.append(columnValue);
prefix.append(", ");
has = true;
}
}
}
if(has){
prefix = prefix.delete(prefix.length()-2,prefix.length());
}
List <String> primaryKeys = this.getTablePrimaryKeys(conditionPojo, conn);
if(primaryKeys.size() == 0){
primaryKeys = columns;
}
StringBuffer suffix = new StringBuffer();
suffix.append(" where ");
has = false;
for (int i = 0; i < primaryKeys.size(); i++) {
String columnName = primaryKeys.get(i);
String columnValue = this.convertToSqlValue(conditionPojo, columnName, conn);
if(conditionNullValue){
if(null != columnValue){
if("NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" is ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}else{
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}
if(has){
suffix = suffix.delete(suffix.length()-5,suffix.length());
}
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
st.executeUpdate();
return true;
}catch(Exception e){
logger.error("database update row or rows error!", e);
return false;
}finally{
this.close(null, st, null);
}
}
/**
* 删除
* @param pojo 删除的对象实例
* @param conditionNullValue 是否将空值加入where判断条件,true加入:false不加入
* @param conn 数据库连接对象
* @return boolean 是否成功,true成功:false不成功
*/
public boolean deleteObject(Object pojo,boolean conditionNullValue,Connection conn) {
PreparedStatement st = null;
try{
String tableName = this.getTableName(pojo);
StringBuffer prefix = new StringBuffer();
prefix.append("delete from "+tableName);
StringBuffer suffix = new StringBuffer();
suffix.append(" where ");
List <String> primaryKeys = this.getTablePrimaryKeys(pojo, conn);
if(primaryKeys.size() == 0){
primaryKeys = this.getTableColumns(pojo, conn);
}
boolean has = false;
for (int i = 0; i < primaryKeys.size(); i++) {
String columnName = primaryKeys.get(i);
String columnValue = this.convertToSqlValue(pojo, columnName, conn);
if(conditionNullValue){
if(null != columnValue){
if("NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" is ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}else{
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}
if(has){
suffix = suffix.delete(suffix.length()-5,suffix.length());
}
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
st.executeUpdate();
return true;
}catch(Exception e){
logger.error("database delete row or rows error!", e);
return false;
}finally{
this.close(null, st, null);
}
}
/**
* 查询
* @param pojo 查询的对象实例
* @param conditionNullValue 是否将空值加入where判断条件,true加入:false不加入
* @param conn 数据库连接对象
* @return List 对象实例的集合
*/
public List<Object> findObject(Object pojo,boolean conditionNullValue,Connection conn) {
PreparedStatement st = null;
ResultSet rs = null;
List<Object> list = new ArrayList<Object>();
try{
String tableName = this.getTableName(pojo);
StringBuffer prefix = new StringBuffer();
prefix.append("select ");
StringBuffer suffix = new StringBuffer();
suffix.append(" where ");
List <String> columns = this.getTableColumns(pojo, conn);
boolean has = false;
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
prefix.append(columnName);
prefix.append(", ");
String columnValue = this.convertToSqlValue(pojo, columnName, conn);
if(conditionNullValue){
if(null != columnValue){
if("NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" is ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}else{
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}else{
if(null != columnValue && !"NULL".equals(columnValue)){
suffix.append(columnName);
suffix.append(" = ");
suffix.append(columnValue);
suffix.append(" and ");
has = true;
}
}
}
if(columns.size()>0){
prefix = prefix.delete(prefix.length()-2,prefix.length());
}
prefix.append(" from "+ tableName);
if(has){
suffix = suffix.delete(suffix.length()-5,suffix.length());
}else{
suffix.setLength(0);
}
String sql = prefix.toString() + suffix.toString();
logger.info(sql);
st = conn.prepareStatement(sql);
rs = st.executeQuery();
while(rs.next()){
Object obj = Class.forName(pojo.getClass().getName()).newInstance();
for (int i = 0; i < columns.size(); i++) {
String columnName = columns.get(i);
Object objValue = rs.getObject(columnName);
if(null != objValue){
this.setPojoValue(obj, columnName, objValue, conn);
}
}
list.add(obj);
}
}catch(Exception e){
logger.error("database find row or rows error!", e);
}finally{
this.close(null, st, null);
}
return list;
}
}
if(null == pojo){
return "";
}else{
List<Integer> positions = new ArrayList<Integer>();
String className = pojo.getClass().getSimpleName();
for (int i = 0; i < className.length(); i++) {
int charCode = (int)className.charAt(i);
if (i > 0 && charCode > 64 && charCode < 91) {
positions.add(i);
}
}
StringBuffer sb = new StringBuffer();
if(null != prefix && !"".equals(prefix.trim())){
sb.append(prefix);
}
if(positions.size() < 1){
sb.append(className);
}else{
for (int i = 0; i < positions.size(); i++) {
if(i == 0){
sb.append(className.substring(0, positions.get(i)));
}else{
sb.append(className.substring(positions.get(i-1), positions.get(i)));
}
sb.append("_");
}
sb.append(className.substring(positions.get(positions.size()-1)));
}
return sb.toString().toUpperCase();
}
}
private void fillTableColumns(Object pojo,Connection conn) throws Exception{
PreparedStatement st = null;
ResultSet rs = null;
try{
String tableName = this.getTableName(pojo);
String sql = "SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '"+tableName+"'";
logger.info(sql);
st = conn.prepareStatement(sql);
rs = st.executeQuery();
Set<String> set = new HashSet<String>();
while(rs.next()){
String columnName = rs.getString("COLUMN_NAME");
if(null != columnName && !"".equals(columnName.trim())){
set.add(columnName.toUpperCase());
}
}
if(set.size()>0){
tableColumns.put(tableName, set);
}
}catch(Exception e){
throw e;
}finally{
this.close(rs, st, null);
}
}
private void fillTableColumnsType(Object pojo,Connection conn) throws Exception{
PreparedStatement st = null;
ResultSet rs = null;
try{
String tableName = this.getTableName(pojo);
String sql = "SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '"+tableName+"'";
logger.info(sql);
st = conn.prepareStatement(sql);
rs = st.executeQuery();
while(rs.next()){
String columnName = rs.getString("COLUMN_NAME");
if(null != columnName && !"".equals(columnName.trim())){
String dataType = rs.getString("DATA_TYPE");
if(null != dataType && !"".equals(dataType.trim())){
columnsType.put(tableName+"."+columnName.toUpperCase(), dataType.toUpperCase());
}
}
}
}catch(Exception e){
throw e;
}finally{
this.close(rs, st, null);
}
}
private void fillTablePrimaryKeys(Object pojo,Connection conn) throws Exception{
PreparedStatement st = null;
ResultSet rs = null;
try{
String tableName = this.getTableName(pojo);
String sql="SELECT A.COLUMN_NAME FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND A.TABLE_NAME = B.TABLE_NAME AND B.TABLE_NAME = '"+tableName+"' and B.CONSTRAINT_TYPE='P'";
logger.info(sql);
st = conn.prepareStatement(sql);
rs = st.executeQuery();
Set<String> set = new HashSet<String>();
while(rs.next()){
String columnName = rs.getString("COLUMN_NAME");
if(null != columnName && !"".equals(columnName.trim())){
set.add(columnName.toUpperCase());
}
}
if(set.size()>0){
tablePrimaryKeys.put(tableName, set);
}
}catch(Exception e){
throw e;
}finally{
this.close(rs, st, null);
}
}
List<String> list = new ArrayList<String>();
String tableName = this.getTableName(pojo);
Set<String> columns = tableColumns.get(tableName);
if(columns == null){
this.fillTableColumns(pojo, conn);
}
columns = tableColumns.get(tableName);
if(columns != null){
Iterator iterator = columns.iterator();
while(iterator.hasNext()){
list.add((String) iterator.next());
}
}
return list;
}
private List<String> getTablePrimaryKeys(Object pojo,Connection conn) throws Exception {
List<String> list = new ArrayList<String>();
String tableName = this.getTableName(pojo);
Set<String> columns = tablePrimaryKeys.get(tableName);
if(columns == null){
this.fillTablePrimaryKeys(pojo, conn);
}
columns = tablePrimaryKeys.get(tableName);
if(columns != null){
Iterator iterator = columns.iterator();
while(iterator.hasNext()){
list.add((String) iterator.next());
}
}
return list;
}
private String convertToSqlValue(Object pojo, String columnName,Connection conn) throws Exception {
Object obj = null;
try{
StringBuffer methodName = new StringBuffer("get");
String [] str = columnName.toLowerCase().split("_");
for (int i = 0; i < str.length; i++) {
str[i] = str[i].replaceFirst(String.valueOf(str[i].charAt(0)), String.valueOf(str[i].charAt(0)).toUpperCase());
methodName.append(str[i]);
}
Method method = pojo.getClass().getMethod(methodName.toString(), null);
obj = method.invoke(pojo, null);
}catch(Exception e){
logger.error("invoke object method error!", e);
return null;
}
String tableName = this.getTableName(pojo);
String dataType = columnsType.get(tableName+"."+columnName);
if(null == dataType){
this.fillTableColumnsType(pojo,conn);
}
dataType = columnsType.get(tableName+"."+columnName);
if("VARCHAR2".equals(dataType)||"NVARCHAR2".equals(dataType)||"CHAR".equals(dataType)||"NCHAR".equals(dataType)){
if(obj == null || "".equals(obj.toString())){
return "NULL";
}else{
return "'"+obj.toString().replace("'", "\"")+"'";
}
}else if("FLOAT".equals(dataType) || "NUMBER".equals(dataType)){
if(obj == null || "".equals(obj.toString().trim())){
return "NULL";
}else{
return obj.toString().replace("'", "\"");
}
}else if("DATE".equals(dataType)){
if(obj == null || "".equals(obj.toString().trim())){
return "NULL";
}else{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
if("java.sql.Date".equals(obj.getClass().getName())){
java.sql.Date date = (java.sql.Date)obj;
return "to_date('"+sdf.format(new java.util.Date(date.getTime()))+"','yyyy/mm/dd hh24:mi:ss')";
}else if("java.util.Date".equals(obj.getClass().getName())){
java.util.Date date = (java.util.Date)obj;
return "to_date('"+sdf.format(date)+"','yyyy/mm/dd hh24:mi:ss')";
}else if("java.sql.Timestamp".equals(obj.getClass().getName())){
java.sql.Timestamp date = (java.sql.Timestamp)obj;
return "to_date('"+sdf.format(new java.util.Date(date.getTime()))+"','yyyy/mm/dd hh24:mi:ss')";
}else{
return "to_date('"+obj.toString().replace("'", "\"")+"','yyyy/mm/dd hh24:mi:ss')";
}
}
}else if(dataType.indexOf("TIMESTAMP") != -1){
if(obj == null || "".equals(obj.toString().trim())){
return "NULL";
}else{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");
if("java.sql.Date".equals(obj.getClass().getName())){
java.sql.Date date = (java.sql.Date)obj;
return "to_timestamp('"+sdf.format(new java.util.Date(date.getTime()))+"','yyyy/mm/dd hh24:mi:ss:ff')";
}else if("java.util.Date".equals(obj.getClass().getName())){
java.util.Date date = (java.util.Date)obj;
return "to_timestamp('"+sdf.format(date)+"','yyyy/mm/dd hh24:mi:ss:ff')";
}else if("java.sql.Timestamp".equals(obj.getClass().getName())){
java.sql.Timestamp date = (java.sql.Timestamp)obj;
return "to_timestamp('"+sdf.format(new java.util.Date(date.getTime()))+"','yyyy/mm/dd hh24:mi:ss:ff')";
}else{
return "to_timestamp('"+obj.toString().replace("'", "\"")+"','yyyy/mm/dd hh24:mi:ss:ff')";
}
}
}else{
if(obj == null || "".equals(obj.toString())){
return "NULL";
}else{
return "'"+obj.toString().replace("'", "\"")+"'";
}
}
}
private void setPojoValue(Object pojo, String columnName,Object objValue,Connection conn) throws Exception {
Method method = null;
String type = null;
try{
StringBuffer methodName = new StringBuffer("get");
String [] str = columnName.toLowerCase().split("_");
for (int i = 0; i < str.length; i++) {
str[i] = str[i].replaceFirst(String.valueOf(str[i].charAt(0)), String.valueOf(str[i].charAt(0)).toUpperCase());
methodName.append(str[i]);
}
method = pojo.getClass().getMethod(methodName.toString(), null);
type = method.getGenericReturnType().toString().replaceFirst("class ", "");
methodName = new StringBuffer("set");
for (int i = 0; i < str.length; i++) {
methodName.append(str[i]);
}
method = pojo.getClass().getMethod(methodName.toString(), new Class[]{Class.forName(type)});
}catch(Exception e){
logger.error("invoke object method error!", e);
}
String tableName = this.getTableName(pojo);
String dataType = columnsType.get(tableName+"."+columnName);
if(null == dataType){
this.fillTableColumnsType(pojo,conn);
}
dataType = columnsType.get(tableName+"."+columnName);
if("VARCHAR2".equals(dataType)||"NVARCHAR2".equals(dataType)||"CHAR".equals(dataType)||"NCHAR".equals(dataType)){
java.lang.String data = (java.lang.String)objValue;
method.invoke(pojo, data);
}else if("FLOAT".equals(dataType) || "NUMBER".equals(dataType)){
java.math.BigDecimal data = (java.math.BigDecimal)objValue;
if("java.lang.Byte".equals(type)){
method.invoke(pojo, data.byteValue());
}else if("java.lang.Short".equals(type)){
method.invoke(pojo, data.shortValue());
}else if("java.lang.Integer".equals(type)){
method.invoke(pojo, data.intValue());
}else if("java.lang.Long".equals(type)){
method.invoke(pojo, data.longValue());
}else if("java.lang.Float".equals(type)){
method.invoke(pojo, data.floatValue());
}else if("java.lang.Double".equals(type)){
method.invoke(pojo, data.doubleValue());
}else{
method.invoke(pojo, data.toString());
}
}else if("DATE".equals(dataType)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
java.sql.Timestamp date = (java.sql.Timestamp)objValue;
if("java.sql.Date".equals(type)){
method.invoke(pojo, new java.sql.Date(date.getTime()));
}else if("java.util.Date".equals(type)){
method.invoke(pojo, new java.util.Date(date.getTime()));
}else if("java.sql.Timestamp".equals(type)){
method.invoke(pojo, date);
}else{
method.invoke(pojo, sdf.format(new java.util.Date(date.getTime())));
}
}else if(dataType.indexOf("TIMESTAMP") != -1){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");
oracle.sql.TIMESTAMP date = (oracle.sql.TIMESTAMP)objValue;
if("java.sql.Date".equals(type)){
method.invoke(pojo, new java.sql.Date(date.timestampValue().getTime()));
}else if("java.util.Date".equals(type)){
method.invoke(pojo, new java.util.Date(date.timestampValue().getTime()));
}else if("java.sql.Timestamp".equals(type)){
method.invoke(pojo, date.timestampValue());
}else{
method.invoke(pojo, sdf.format(new java.util.Date(date.timestampValue().getTime())));
}
}else{
method.invoke(pojo, objValue);
}
}