sqlquery调用存储过程
1、首先先创建一个存储过程,代码如图,存储过程主要的功能是为表JingYan插入新的数据。
‘贰’ hibernate调用存储过程问题
调用存储过程可以不写配置文件,直接在类中搞定! 有问题可以网络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
请采纳答案,支持我一下。
‘叁’ Hibernate调用存储过程,使用SQLQuery的方式,请问如果返回参数是CURSOR,怎么写呢
我使用的oracle
proc.registerOutParameter(2, OracleTypes.CURSOR);
不过第一个数好像是从1开始的吧
‘肆’ 请问什么是存储过程,存储过程作用是什么,什么情况下才用存储过程如何用sql调用存储过程
sql语句执行的时候要先编译,然后执行。存储过程(Stored Procere)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程.
这是一个基础教程你看看http://www.aspxuexi.com/asp/sp/2007-11-20/2990.htm
‘伍’ Hibernate 调用存储过程 该语句没有返回结果集
修改存储过程试试:
alter procere test()
as
SET NOCOUNT ON --加上这句话;有的出现这个问题,加上之后问题解决了;嘿嘿
‘陆’ 关于hibernate调用存储过程
调用存储过程可以不写配置文件,直接在类中搞定! 有问题可以网络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
‘柒’ 写个动态查询的Sql存储过程。调用不成功。请高手指点
改一下存储过程
if exists (select * from sysobjects where name='studentQuery')
drop procere studentQuery
go
create procere studentQuery
@sqlStr nvarchar(100)
as
declare @sql nvarchar(1000)
set @sql=''
set @sql='select * from 'studentQuery'where 1=1' + ''+ @sqlStr
exec(@sql)
‘捌’ 使用query控件怎么调用存储过程
过程如下:
public Boolean doInHibernate(Session session)
throws HibernateException, SQLException {
try{
Transaction tr = session.beginTransaction();
SQLQuery query = session.createSQLQuery("{call CommandAdapter(?,?,?,?)}");
query.setString(0,"ls");
query.setInteger(1, machineid);
query.setString(2, param);
query.setInteger(3, 0); //
query.executeUpdate();
tr.commit();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}finally{
session.close();
}
}
使用hibernate调用带参数返回值的存储过程方法
在调用带参数返回值的方法时,需使用到CallableStatement对象。因此,首先得设法获取一个Connection。
获取Connection 方法:
(1)session.connection();//此方法目前已被弃用
(2)SessionFactoryUtils.getDataSource(sessionFactory).getConnection()
不
过我在使用SessionFactoryUtils.getDataSource(sessionFactory)时,一直获取的都是空值,为此参考
SessionFactoryUtils的源代码直接利用ConnectionProvider对象来获取一个Connection实例。
完整代码:
SessionFactory sessionFactory=this.getSessionFactory();
if (sessionFactory instanceof SessionFactoryImplementor){
ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory).getConnectionProvider();
try {
CallableStatement statement = cp.getConnection().prepareCall(
"{call MachineDataQuery(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
statement.setInt(1, machineId);
statement.setInt(2, jobId);
statement.setInt(3, partTypeId);
statement.setInt(4, compentId);
statement.setInt(5, opId);
statement.setInt(6, roleId);
statement.setInt(7, userId);
statement.setString(8, sd);
statement.setString(9, ed);
statement.registerOutParameter(10, Types.FLOAT);
statement.registerOutParameter(11, Types.FLOAT);
statement.registerOutParameter(12, Types.FLOAT);
statement.registerOutParameter(13, Types.FLOAT);
statement.registerOutParameter(14, Types.FLOAT);
statement.execute();
System.out.println(statement.getFloat(10));
System.out.println(statement.getFloat(11));
System.out.println(statement.getFloat(12));
System.out.println(statement.getFloat(13));
System.out.println(statement.getFloat(14));
} catch (SQLException e) {
e.printStackTrace();
}finally{
cp.close();
}
}
ps:切记存储过程中不可有多余的print或select语句,否则会抛出异常“com.microsoft.sqlserver.jdbc.SQLServerException: 已生成用于更新的结果集。”
‘玖’ sql 查询条件中调用存储过程
存储过程就是一个完整的SQL语句,
所有的条件什么之类的直接定在存储过程里,
然后在程序中直接调用这个存储过程就行了,
这样做的好处就是如果以后程序某个功能什么要稍微改善一下,直接改写存存储过程里的SQL语句就行了.不用再重新编辑源程序...
‘拾’ sql server 游标调用存储过程
不可以的,存储过程不会返回游标结果集,而for后面的需要的是游标结果集