问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于hibernate调用存储过程

发布网友 发布时间:2022-04-09 01:09

我来回答

4个回答

懂视网 时间:2022-04-09 05:31

1.plsql 代码    create Procedure proc() begin select * from proctab; end; 1 create procedure proc1(v_no number(4)) 2 begin 3 select * from proc1 4 where id=v_no; 5 end;    2.Hibernate 存储过程调用的一种方法是,通过XML传统的映射方式去调用。 -》存储过程映射和领域模型中的实体的对应关系    复制代码 1 <class name="com.test.User" table="proctab"> 2 <id name="id" column="id"> 3 <generator class="native"/> 4 </id> 5 <property name="name" column="name" type="string" /> 6 <property name="age" column="age" type="integer" /> 7 </class> 8 <sql-query name="getUser" callable="true"> 9 <return alias="user" class="com.test.User"> 10 <return-property name="id" column="id" /> 11 <return-property name="name" column="name" /> 12 <return-property name="age" column="age" /> 13 </return> 14 {call proc()} 15 </sql-query> 复制代码 -》Hibernate API 对存储过程的调用 复制代码 1 Session ss= HibernateSessionFactory.getSession() 2 List li=ss.getNamedQuery("getUser").list(); 3 ss.close(); 4 5 Session ss= HibernateSessionFactory.getSession() 6 List li=ss.getNamedQuery("getUser").list(); 7 ss.close(); 复制代码 -》JDBC API 对存储过程的调用 复制代码 1 Session session =HibernateSessionFactory.getSession(); 2 Connection conn = session.connection(); 3 ResultSet rs =null; 4 CallableStatement call = conn.prepareCall("{Call proc()}"); 5 rs = call.executeQuery(); 6 rs.close(); 7 session.close(); 8 9 Session session =HibernateSessionFactory.getSession(); 10 Connection conn = session.connection(); 11 ResultSet rs =null; 12 CallableStatement call = conn.prepareCall("{Call proc()}"); 13 rs = call.executeQuery(); 14 rs.close(); 15 session.close(); 复制代码   -》直接使用 Hibernate createQuerySql调用存储过程 复制代码 1 Session session =HibernateSessionFactory.getSession(); 2 SQLQuery query = session.createSQLQuery("{Call proc()}"); 3 List list =query.list(); 4 session.close(); 5 6 Session session =HibernateSessionFactory.getSession(); 7 SQLQuery query = session.createSQLQuery("{Call proc()}"); 8 List list =query.list(); 9 session.close(); 复制代码 -》通过Hibernate API或者JDBC,API给存储过程传参 复制代码 1 CallableStatement call = conn.prepareCall("{Call proc(?)}"); 2 call.setString(1, 参数); 3 rs = call.executeQuery(); 4 5 CallableStatement call = conn.prepareCall("{Call proc(?)}"); 6 call.setString(1, 参数); 7 rs = call.executeQuery(); 复制代码 1 SQLQuery query = session.createSQLQuery("{Call proc(?)}"); 2 query.setString(0, 参数); 3 List list =query.list();

 

Hibernate调用Oracle的存储过程

标签:

热心网友 时间:2022-04-09 02:39

调用存储过程可以不写配置文件,直接在类中搞定! 有问题可以百度Hi 我!~
例子
public void saveStoredProcere(final String adminId, final String menuId, final String toolbars) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery sqlQuery = session.createSQLQuery("{call P_SaveOperatorPopedom(?,?,?)}");
sqlQuery.setString(0, adminId);
sqlQuery.setString(1, menuId);
sqlQuery.setString(2, toolbarsXML);
sqlQuery.executeUpdate();
return null;
}
});
}

重点是这个写法 session.createSQLQuery("{call P_SaveOperatorPopedom(?,?,?)}");
我这边用的是spring提供的HibernateDaoSupport追问我的存储过程是一个查询,需要获得返回的结果,我该怎么取这个结果呢?

追答写法是一样的,只要你存储过程有查询返回值
只要使用sqlQuery.list();方法就可以获取到查询List值了

带返回值的你试一下
Connection conn = session.connection();
ResultSet rs =null;
CallableStatement call = conn.prepareCall("{Call proc(?,?,?)}");
call.setString(0,"abc");
call.registerOutParameter(1, Types.VARCHAR);
call.registerOutParameter(2,Types.VARCHAR);
rs = call.executeQuery();
if(rs.next()){
System.out.println("存储过程得到的第一个返回值是:"+rs.getString(1));
System.out.println("存储过程得到的第二个返回值是:"+rs.getString(2));
}

热心网友 时间:2022-04-09 03:57

//数据恢复
public ActionForward backDB(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response){
try{
String url = this.getClass().getClassLoader().getResource("/")
.toString().replace("WEB-INF/classes/", "").replace(
"file:/", "");
String backUrl=url+"BackDatabase/";
String dbName=request.getParameter("dbName");
File db=new File(backUrl+dbName);
if(!db.exists()){
request.setAttribute("result", "操作失败!");
return mapping.findForward("BackResult");
}
String backSQL="use master restore database SQDB from disk='"+backUrl+dbName+"' with replace";
XmlBeanFactory context=new XmlBeanFactory(new ClassPathResource("sys.xml"));
SessionFactory sf=(SessionFactory)context.getBean("sessionFactory");
try{
CallableStatement cstmt = sf.openSession().connection().prepareCall("stopdb");
if(!cstmt.execute()){
java.sql.PreparedStatement pstmts=sf.openSession().connection().prepareStatement(backSQL);
if(!pstmts.execute()){
request.setAttribute("result","操作成功!请您重新登录");
return mapping.findForward("dbBackSuccess");
}else{
request.setAttribute("result", "操作失败!");
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
sf.openSession().close();
}
}catch(Exception e){
request.setAttribute("result", "操作失败!");
}
return mapping.findForward("error");
}

CallableStatement cstmt = sf.openSession().connection().prepareCall("stopdb");
这句是执行存储过程的 stopdb是存储过程名字

热心网友 时间:2022-04-09 05:31

你好,你的存储过程是什么样的,比如存储过程是无参数,还是输入参数,还是输出参数,我这有个例子,先贴出来是无参数的存储过程,如果需要其他形式的请留言!
代码
------------------------------------------------------------------------------
/**
* 1
*
* 功能:使用不带参数的存储过程
*
* 说明:使用JDBC驱动程序调用不带参数的存储过程时,必须使用call SQL转义序列。
* 不带参数的 call 转义序列的语法如下所示:{call procere-name}
*
* @author Lupeng
* 时间:2009-09-20 17:19:46
* @return
*
* 存储过程脚本:InvokeSPNoParameter
*
*/

@SuppressWarnings("unchecked")
public List<TSp> invokeSPNoParameter() {
List<TSp> list=new ArrayList<TSp>();
Session session = null;
Transaction tx = null;
try {
session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
// 调用*.hbm.xml定义的存储过程(也可以调用*.hbm.xml定义的是SQL语句)
// {call sp.dbo.InvokeSPNoParameter}
Query query=session.getNamedQuery("sp");
list=query.list();

tx.commit();
} catch (HibernateException e) {
if (tx != null){
tx.rollback();
}
throw e;
} finally{
session.close();
}
return list ;
}追问我的存储过程是带有输入参数和输出参数的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 楼梯的水泥台阶上可以铺地板革吗 手机腾讯会议共享屏幕播放视频没声 村田“负离子”抽油烟机有什么作用呢? 装了油烟机也不可能吸走所有的油烟,油烟机安在哪才能最大的发挥作用? 汽机抽油烟风机的作用 商场油烟主机作用 油箱排油烟机的作用还有什么?会出现什么故障?如何处理? hibernate 调用oracle存储过程问 在自己家电脑登陆过QQ炫舞在电脑哪个文件夹可以找到? 可以查询QQ炫舞具体登录时间吗? iso14001审核注意哪些问题 建筑工地安全施工11条有哪些具体内容? 绿色生活方式调查表 他强任他强,清风拂山岗。这首诗是怎么写的? 垃圾分类回收调查表的研究内容填什么? 生活垃圾投放率检查表怎么做? vivo手机上面显示hd怎么关 小米平板5怎么连外置摄像头- 问一问 打印照片时怎么老出现Wps会员缴费页面怎么去掉? 银行贷款额度不够不给放贷。。打电话给银行,银行说,现在银行额度不 银行主动给客户打电话说能贷款10万,结果客户到了银行又说是贷不了,这属于什么? 关于Oracle存储过程及Hibernate调用 见女人就干的小说 求一描写美女的文章… 除了《洛神赋》,还有什么经典的形容美女的古代文章 男人心干情愿爱一个女人的短文 求像掉进美人窝类文章 广东高大植物树干上种上花的品种有哪些树? 广州行道树一般用什么树 广州常见的有哪四种树种?? 生长在广东广西的树木品种有哪些 广州都有什么树 广州适合种哪几种树? 广州的乡土树种有哪些? 广东有几种树 我用viber网络电话给陌生人打电话,对方会显示什么,我的电话号码吗? 在和别人打电话时能改变声音的软件 以前有个晚安软件是自己设定睡觉时间.到点了就会有陌生人给你打电话道晚安的那个软件叫什么? 滚筒洗衣机洗衣粉盒上方的进水槽如何清洗?不能拆卸貌似 请问下载什么软件 给别人打电话不会显示以前的号码 怎么能让小度机器人整点播报时间? 小度音箱整点报时的报时声音怎么设置?