首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

自各儿封装了一个BaseDao的插入的方法,但是添加日期类型老报错,求解!

2013-09-11 
自己封装了一个BaseDao的插入的方法,但是添加日期类型老报错,求解!!!!/** * 更新的公共方法 * @param sql

自己封装了一个BaseDao的插入的方法,但是添加日期类型老报错,求解!!!!


/**
 * 更新的公共方法
 * @param sql  拼接的sql语句
 * @param paramValue  vo属性值的集合
 * @throws SQLException 
 * @throws ClassNotFoundException 
 */
public void updateVo(String sql,Object...paramValue) throws ClassNotFoundException, SQLException{
//获取连接
Connection con =DBUtil.getCon();
//预处理sql语句
PreparedStatement ps=con.prepareStatement(sql);
//填坑
if(paramValue!=null&&paramValue.length>0){
int count=0;
for(int i=0;i<paramValue.length;i++){
ps.setObject(++count, paramValue[i]);
}
}
//执行
ps.executeUpdate();
//关闭
DBUtil.close(con, ps, null);
}
/**
 * 添加记录
 * @param objVo
 * @throws NoSuchMethodException 
 * @throws SecurityException 
 * @throws InvocationTargetException 
 * @throws IllegalAccessException 
 * @throws IllegalArgumentException 
 * @throws SQLException 
 * @throws ClassNotFoundException 
 */
public void addVo(Object objVo,String preKeyName) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, SQLException{
//建立存放属性值的List
List fieldList = new ArrayList();
//获取表名
Class c= objVo.getClass();
String tableName=GetName.getTabOrColumnName(c.getSimpleName());
//动态拼接sql语句
StringBuffer sql=new StringBuffer("insert into "+tableName+" values(");
Field[] fArray=c.getDeclaredFields();
for(int i=0;i<fArray.length;i++){
if(fArray[i].getName().equals(preKeyName)){
sql.append("seq_"+tableName+".nextval,");
}else{
sql.append("?,");
//将vo的属性值添加到List里
String getter =GetName.getter(fArray[i]);
Method m = c.getDeclaredMethod(getter);
fieldList.add(m.invoke(objVo));

}
}
sql.deleteCharAt(sql.length()-1);
sql.append(")");
//执行公共方法
updateVo( sql.toString(), fieldList.toArray());

}
public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, SecurityException, IllegalArgumentException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {


EmpVo emp = new EmpVo();
emp.setEmpno(1235);
emp.setEname("jiaopan");
emp.setSal(1500.0);
emp.setHiredate(new Date(10000L));

new BaseDao().addVo(emp, null);

}




第一个方法是更新的公用方法,会在第二个插入方法中使用,然后main方法测试的时候总是报ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 DATE 的错误,我的VO类是sql.Date...而且数据库 也是date类型,奇怪了。。。

[解决办法]
是不是插入的数据有误!!
[解决办法]
可能是字段和值没对上
[解决办法]
你插入数据库的数据需要是基本类型的哦,你的日期的Date类型的对象,当然插不进去了,你回想下只有hibernate这种你可以直接不管Date是不是对象的。你这个是原生的sql语句查询啊,怎么能用对象作为传入的数据呢
[解决办法]
楼主是拼接sql的吧, 如果是时间类型的话,sql里面要加 to_date('字段','yyyy-MM-dd')

热点排行