JDBC调用存储过程,以及存储过程 事务的使用.....
在JDBC中调用存储过程 首先就要在数据库中存在 要调用的过程 ,存储过程是一组SQL语句的集合,我们吧实现某一功能的 SQL语句集合在一起来使用,方便了用户,不光是这样,存储过程可以预编译,也就是说只要调用了一次存储过程,那么下次在调用存储过程的时候 就不需要进行再次编译了 。提高了 数据库访问的效率 。。
在 SQL SERVER20008 中创建存储过程 语法如下
Create Procedure 过程名字(@parameter1 int ,@parameter2 char(10) .........) as <SQL命令>
例子:
Create Procedure a as select * from info // 创建了存储过程 a 表示查询 info表的所有数据
在 JDBC中调用 方法 。。。
Connection c =DriverManager.getConnection("jdbc:odbc:datasoure") ; //连接数据库
CallableStatement m=c.prepareCalle("call p(?,?)") ; //创建CallableStatement对象 并传递存储过程调用 的SQL执行语句 ?表示 JDBC存储过程参数的通用格式
m.setString(1,"one");
m.setString(2."two"); //分别设置第一个参数?和第二个参数?的值
然后调用 m.executeUpdate() ;//执行存储过程
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在JDBC操作中 我们还记得 Connection的 commit方法 吗? 这个方法 是提交SQL命令 ,默认状态下是自动提交 .也就是说 不用我们 显示的去调用这个方法来提交SQL命 令 。
在一般的 SQL 查询 更新删除 等操作的时候 我们不用去设置它的状态,自动提交就行 。但是在事务中,我们不得不用到 commit方法手动提交 ,关于什么事务 下面我详细说 明 ....
事务?其实就是几个SQL语句的组合 ,但是这个组合有特性 ,就是他们有原子性?什么是原子性呢 ,就是 事务中的 SQL操作要么都执行 ,要么 一个也不执行 ,这就是事务的概念 , 什么时候用到事务呢 ,比如说 我们 在处理银行转账服务的同时 是一个账号 扣钱 一个账户加钱, 这两个操作只能同时进行 ,但却不能一个执行而另一个不执行,事务的用处在银行转账得到了很好的体现。。。。。。
事务的处理 我们就不能用自动提交模式了 ,
1、我们需要调用 Connection类的 setAutoCommit(false)方法设置模式为手动提交,设置了这个模式之后我们调用 executeUpdate等方法执行的SQL命令都不会提交
除非我们显示调用了Connection类的 commit()方法 。
2、如果在事务处理当中 某一条件不符合的时候 我们就可以调用 Connection类的 rollBack()函数回滚事务 ,取消之前所作的一切事务操作 ,