JDBC之调用存储过程
来源:互联网 发布:pvc地板知乎 编辑:程序博客网 时间:2024/05/20 15:11
1。无参
我们先看预先写好的存储过程:
create procedure p1as select * from studentgo
如何实现JDBC调用无参的存储过程呢?
package a1;import java.sql.*;public class Test05 { public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection connection = DriverManager.getConnection("" + "jdbc:sqlserver://localhost:1433;DatabaseName=tongjunchao","sa","123");;// CallableStatement cs = connection.prepareCall("p1"); CallableStatement cs = connection.prepareCall("{call p1 }"); //以前是这里面些sql语句,现在因为是调用了存储过程,所以,没有参数了。 ResultSet rSet = cs.executeQuery(); while (rSet.next()) { String sid = rSet.getString("sid"); String sname = rSet.getString("sname"); String sex = rSet.getString(3); int age = rSet.getInt(4); String tel = rSet.getString("tel"); System.out.println(sid+"\t"+sname+"\t"+sex+"\t"+age+"\t"+tel); } //close(); rSet.close(); cs.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }}
运行结果:
sid sname sex age tels001 丰登儿 男 35 13527542451s002 班克尔 女 17 13884233134s003 车笔刀 女 13 15086623248s004 趴耳朵 男 19 15323535256s005 直角 女 23 15653579258s006 扳手 女 19 13663279788s007 俄石板 女 21 13656529396
2.有参数,这里用两个参数做示例
--创建一个存储过程,根据年龄和性别查询学生信息create procedure p3 @age int, @sex varchar(2)as select * from studentwhere age = @age and sex = @sex;go
那么,如何实现JDBC调用带两个参数的存储过程呢?
有两种方法,以下给出的全部代码采用的是推荐的方法!
package a1;import java.sql.*;public class Test05 { public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection connection = DriverManager.getConnection("" + "jdbc:sqlserver://localhost:1433;DatabaseName=tongjunchao","sa","123");;// CallableStatement cs = connection.prepareCall("p1"); CallableStatement cs = connection.prepareCall("{call p3 (?,?)}"); //以前是这里面些sql语句,现在因为是调用了存储过程,所以,没有参数了。 cs.setString(1, "17"); cs.setString(2, "女"); ResultSet rSet = cs.executeQuery(); while (rSet.next()) { String sid = rSet.getString("sid"); String sname = rSet.getString("sname"); String sex = rSet.getString(3); int age = rSet.getInt(4); String tel = rSet.getString("tel"); System.out.println(sid+"\t"+sname+"\t"+sex+"\t"+age+"\t"+tel); } //close(); rSet.close(); cs.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }}
其中的
CallableStatement cs = connection.prepareCall("{call p3 (?,?)}"); //以前是这里面些sql语句,现在因为是调用了存储过程,所以,没有参数了。 cs.setString(1, "17"); cs.setString(2, "女");
可以替换成:CallableStatement cs = connection.prepareCall("p3 17,'女'");
这也是种不错的简便方式啦
运行结果:
s002 班克尔 女 17 13884233134
3.JDBC调用带有输出的存储过程
创建的存储过程如下:
--根据sid 输出该学生的电话号码create procedure p4@sid varchar(8),@tel varchar(16) outputasselect @tel = tel from studentwhere sid = @sid
示例代码如下:
package a1;import java.sql.*;public class Test05 { public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection connection = DriverManager.getConnection("" + "jdbc:sqlserver://localhost:1433;DatabaseName=tongjunchao","sa","123");;// CallableStatement cs = connection.prepareCall("p1"); CallableStatement cs = connection.prepareCall("{call p4 (?,?)}"); //以前是这里面些sql语句,现在因为是调用了存储过程,所以,没有参数了。 /** * 这里我想强调一下的是,下面的操作都是通过CallableStatement * 的对象调用方法来进行的操作, * 这样记忆是不是比较简便呢? * (*^__^*) 嘻嘻 */ cs.setString(1, "s001"); cs.registerOutParameter(2, Types.VARCHAR); cs.execute(); String string = cs.getString(2); System.out.println("tel:"+string); //close(); cs.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }}
运行结果为:
tel:13527542451
1 0
- JDBC之调用存储过程
- JDBC之调用存储过程
- JDBC之调用存储过程
- JDBC详解之存储过程的调用
- jdbc调用存储过程
- Jdbc调用存储过程
- jdbc调用存储过程
- jdbc调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- Jdbc存储过程调用
- jdbc调用存储过程
- JDBC调用存储过程
- Jdbc调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- jdbc调用存储过程
- SDUTOJ 2080 最长公共子序列问题(LCS)
- 第七周Android(CheckBox /ImageView/ListView/ImageButton/AdapterView)
- static函数和变量(转载)
- apache禁止访问网站目录
- 前端弹出层控件
- JDBC之调用存储过程
- 软件测试系列之软件测试过程模型V,W,H,X等
- 【欧拉函数算法总结&&运算原理&&模板】
- ARM寻址方式
- Location的关键点
- HDU 2841 Visible Trees(容斥定理)
- 上海外滩附近一日游
- 动画AnimatorSet
- Binary Tree SDUT 2499