怎样在JAVA 中封装数据库操作(增删改查)运用反射机制!已贴出删除和查询方法,求增加和修改! 本帖最后由 lj312051787 于 2014-08-20 07:53:08 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在这里花100分问,不如花两周的时间研究一下hibernate的源代码。一方面解决了自己的问题,另一方面也对hibernate搞的门清。 真搞不懂 删除和修改都出来了 修改和增加还会很难吗 只是拼接的sql方式不一样而已嘛 自己写可能想的不够那面全面,你还是去看下hibernate或者mybatis是怎么生成SQL的吧! 一个增加方法 修改也差不多 就不写了/** * 增加方法 * @param obj * @return * @throws Exception */public static int add(Object obj) throws Exception {/** 声明部分 **/Class clazz = obj.getClass();// 获取对象反射信息StringBuffer sql = new StringBuffer("insert into"+ clazz.getSimpleName() + " (");StringBuffer sqlParams = new StringBuffer("");StringBuffer sqlVals = new StringBuffer("");// 获取对象属性信息Field[] fields = clazz.getDeclaredFields();/** 拼接SQL语句 **/for (Field f : fields) {// 获取对象方法名String methodName = getMethodNameByField("get", f.getName());// 获得此方法的反射Method method = clazz.getDeclaredMethod(methodName);// 执行方法获取返回值Object value = method.invoke(obj);// 判断返回值是否为空,不为空则拼接到sql语句if (value != null) {if (f.getType() == String.class) {// 字符类型sqlParams.append(" , " +f.getName());sqlVals.append(" , " +value);} else if (f.getType() == Date.class|| f.getType() == Timestamp.class) {sqlParams.append(" , " +f.getName());sqlVals.append(" , " +to_date('"+ sdf.format(value) + "','yyyy-MM-dd')");} else {sqlParams.append(" , " +f.getName());sqlVals.append(" , " +value);}}}sqlParams和sqlVals 的第一个逗号 要去掉 代码我就不写了sql.append(sqlParams).append(" ) values(").append(sqlVals).append(")");System.out.println(sql.toString());/** 执行SQL语句 **/Connection conn = null;PreparedStatement ps = null;int count = 0;try {conn = DbUtil.getConn();ps = conn.prepareStatement(sql.toString());count = ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {DbUtil.closeconn(conn, ps, null);}return count;} 用InetAddress获取IP无法使用 ant 编译打包的Jar 无法运行 笔试题目java算法求解 如何合并文件 [Help] Java ToolTip 讨论关于Vector与ArrayList 容器上面还能加载组件吗! JDBC连接SQL 2008 关于Java的一些概念问题. 在jbuilder6的frame的design中,不能调整控件大小,也没有宽和高的属性,为什么? Java 如何进行性能分析?有工具吗 为何SetVisible(false)没有用?
* 增加方法
* @param obj
* @return
* @throws Exception
*/
public static int add(Object obj) throws Exception {
/** 声明部分 **/
Class clazz = obj.getClass();// 获取对象反射信息
StringBuffer sql = new StringBuffer("insert into"
+ clazz.getSimpleName() + " (");
StringBuffer sqlParams = new StringBuffer("");
StringBuffer sqlVals = new StringBuffer("");
// 获取对象属性信息
Field[] fields = clazz.getDeclaredFields();/** 拼接SQL语句 **/
for (Field f : fields) {
// 获取对象方法名
String methodName = getMethodNameByField("get", f.getName());
// 获得此方法的反射
Method method = clazz.getDeclaredMethod(methodName);
// 执行方法获取返回值
Object value = method.invoke(obj);
// 判断返回值是否为空,不为空则拼接到sql语句
if (value != null) {
if (f.getType() == String.class) {// 字符类型
sqlParams.append(" , " +f.getName());
sqlVals.append(" , " +value);
} else if (f.getType() == Date.class
|| f.getType() == Timestamp.class) {
sqlParams.append(" , " +f.getName());
sqlVals.append(" , " +to_date('"
+ sdf.format(value) + "','yyyy-MM-dd')");
} else {
sqlParams.append(" , " +f.getName());
sqlVals.append(" , " +value);
}
}
}
sqlParams和sqlVals 的第一个逗号 要去掉 代码我就不写了
sql.append(sqlParams).append(" ) values(").append(sqlVals).append(")");
System.out.println(sql.toString());
/** 执行SQL语句 **/
Connection conn = null;
PreparedStatement ps = null;
int count = 0;
try {
conn = DbUtil.getConn();
ps = conn.prepareStatement(sql.toString());
count = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
DbUtil.closeconn(conn, ps, null);
}
return count;
}