您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第17章:Java数据库编程】_CallableStatement接口
发布时间:2021-01-11 15:13:08编辑:雪饮阅读()
创建一个存储过程
因为存储过程中begin与end之间的语句需要用到分号,而默认mysql的分号又是语句结束的标识,所以要在创建存储过程时候需要先修改下mysql默认的语句结束标识符(定界符),例如这里修改为”//”
然后这里创建的存储过程名称是myproc,接收3个参数
参数方向in表示仅仅接收,即输入,intout则是输入与输出,out则仅仅输出
然后存储过程中的逻辑,这里仅仅是将接收的3个参数(变量)重新赋值了,则inout和out对应的存储过程调用者所传参的变量也就会对应被赋值了。
调用存储过程
mysql> delimiter ;
mysql> set @x1=70;
Query OK, 0 rows affected (0.00 sec)
mysql> set @x2=80;
Query OK, 0 rows affected (0.00 sec)
mysql> call myproc(@x1,@x2,@x3);
+------+------+------+
| p1 | p2 | p3 |
+------+------+------+
| 70 | 80 | NULL |
+------+------+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> select @x1,@x2,@x3;
+------+------+------+
| @x1 | @x2 | @x3 |
+------+------+------+
| 70 | 20 | 30 |
+------+------+------+
1 row in set (0.00 sec)
调用存储过程时重新将mysql的语句定界符修改回来,然后定义了两个变量,第三个变量虽然没有定义,但是在传参的时候传了,应该是会隐式定义(个人理解)的。
然后调用存储过程返回的结果其实仅仅只是传来的对应参数的与参数值(个人理解),这里存储过程处理之后的结果会回显影响到原来这三个变量,根据in、out、inout分别有不同的影响。
第一个由于是in,所以输出还是接收的值,第二个由于是inout,所以允许改变被保存(引用),第三个是out,仅仅允许改变被保存,同样是引用。
用java调用存储过程
CallableStatement就是java中用来调用存储过程的
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.CallableStatement ;
import java.sql.Types ;
public class Hello{
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
public static final String DBURL = "jdbc:mysql://localhost:3306/xynes" ;
public static final String DBUSER = "root" ;
public static final String DBPASS = "" ;
public static void main(String args[]) throws Exception{
Class.forName(DBDRIVER) ;
Connection conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
String sql = "{CALL myproc(?,?,?)}" ;
CallableStatement cstmt = conn.prepareCall(sql) ;
cstmt.setInt(1,70) ;
cstmt.setInt(2,80) ;
//设定第二三参数的返回(目标存储过程仅仅二三参数有输出)
cstmt.registerOutParameter(2,Types.INTEGER) ;
cstmt.registerOutParameter(3,Types.INTEGER) ;
cstmt.execute();
System.out.println("inout输出:" + cstmt.getInt(2)) ;
System.out.println("out输出:" + cstmt.getInt(3)) ;
cstmt.close() ;
conn.close() ;
}
};
D:\>javac Hello.java
D:\>java Hello
inout输出:20
out输出:30
关键字词:java,存储过程,CallableStatement
相关文章
- 【第17章:Java数据库编程】_处理大数据对象(2)—处理BLOB
- 【第17章:Java数据库编程】_处理大数据对象(1)—处理CLOB
- 【第17章:Java数据库编程】_PreparedStatement接口
- 【第17章:Java数据库编程】_ResultSet接口
- 【第17章:Java数据库编程】_执行数据库更新操作
- 【第17章:Java数据库编程】_JDBC操作步骤及数据库连接
- 【第16章:Annotation】_深入Annotation
- 【第16章:Annotation】_反射与Annotation
- 【第16章:Annotation】_自定义Annotation
- 【第16章:Annotation】_系统内建Annotation