目前该功能(简称copyinsert)可以在mysql数据库里用sql语句实现,我想用hibernate实现,大部分都已经完成,感觉在dao层有一些错误,希望大佬帮忙解惑,能够解决者,还可以另外给C币。
例子如下:(ID为自增,非数据库定义内容)
数据库原来有三条记录,然后在mysql中输入查询语句:
INSERT INTO t_test(NO,NAME,SEX) SELECT REPLACE (NO,'XS1','XS4'),NAME,SEX FROM t_test WHERE NO='XS1';
可以成功在mysql数据库中实现,结果如下:
(从上面看,在数据库中直接操作是可以的,但是我想用框架实现)我用了hibernate,struts2,Jeasyui框架(基本都不熟练),目前能确定的是dao层的拼接的sql语句是正确的,但是不能实现插入数据库的功能。
系统主界面如下:
点击datagrids上面的“复制并插入“按钮,期望实现**复制某一条信息,修改其中一列后再插入数据库中**(例子是,复制XS1信息,将XS1修改为XS99后,再插入原数据库)。主界面jsp关键代码如下:
//1."复制并插入信息"按钮作用
$("#deriveBtn").click(function(){
var no1="XS1";
var no2="XS99";
$.post("test_copyinsert.action",{"no1":no1,"no2":no2},function(data){
if(data.success){
//刷新datagrid
$("#list").datagrid("load");
//提示
$.messager.show({
title:"提示",
msg:"insertcopy成功"
});
}else{
$.messager.alert("提示","检索失败:"+data.msg,"error");
}
},"json");
});
});
下面是TestAction部分代码(主要体现copyinsert):
package test.action;
//copyinsert实现
private String no1;
public void setNo1(String no1) {//普通属性驱动,提供set方法进行接收
this.no1 = no1;
}
private String no2;
public void setNo2(String no2) {//普通属性驱动,提供set方法进行接收
this.no2 = no2;
}
public void copyinsert(){
service.copyinsert(no1,no2);
}
}
下面是TestServiceImpl部分代码(主要体现copyinsert):
package test.service.impl;
@Override
public void copyinsert(String no1, String no2){
dao.copyinsert(no1,no2);
}
}
下面是TestDaoImpl部分主要代码(主要体现copyinsert功能):
@Override
public void copyinsert(String no1, String no2) {
// 获取Session
Session session = HibernateUtils.getSession();
try {
Transaction tx = session.beginTransaction();
String sql="INSERT INTO t_test (NO,NAME,SEX) SELECT REPLACE (NO,"+"'"+no1+"'"+","+"'"+no2+"'"+"),NAME,SEX FROM t_test WHERE NO="+"'"+no1+"'"+";";
SQLQuery sqlQuery = session.createSQLQuery(sql);
List list=sqlQuery.list();//就是这一行!!!!!
tx.commit();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 释放session
session.close();
}
其中,在上述TestDaoImpl代码中,我不太清楚“List list=sqlQuery.list();”的作用,但是如果没有添加这一行代码,运行程序(即点击主界面“复制并插入”按钮)后,数据库没有插入值,myeclipse的Console也没有输出任何新的查询语句;
当在上述TestDaoImpl代码中添加“List list = sqlQuery.list(); ”这一行代码后,再点击按钮运行,数据库仍然没有插入值,但是Console输出了查询语句,但是紧接着会报错,mysql数据库也没有成功插进数据,如图: