1.存储过程分类
分为"系统级存储过程"和"用户级存储过程"
用户级存储过程分为有参数的和无参数的
而有参数的又分为:
1)有输入参数无输出参数
2)有输出参数无输入参数
3)有输入又有输出参数
2.JAVA调用存储(J2EE调用存储)过程例子
1)在SqlServer里创建存储过程,代码如下:
- alter proc proc_productName //proc_productName存储过程名
- @productName varchar(50) //输入参数
- as
- select productID,productName from Products where productName like @productName;
- exec proc_productName @productName = '%f%' //测试存储过程写的是否正确
1)创建连接池
2)假如我们用DBCP来调用连接池,代码如下:
- public static void getname(String parname) {
- BasicDataSource bds=new BasicDataSource();
- bds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- bds.setUrl("jdbc:sqlserver://localhost:1433;databaseName=NorthWind");
- bds.setUsername("sa");
- bds.setPassword("");
- String sql="{call proc_productName(?) }"; //call 存储过程名 输入参数
- ResultSet rs=null;
- Connection conn=null;
- CallableStatement cs=null; //相对于pstmt
- try {
- conn=bds.getConnection();
- cs=conn.prepareCall(sql);
- cs.setString(1,"%f%"); //给Sql存储过程输入参数赋值
- rs=cs.executeQuery();
- while(rs.next()){
- System.out.println(rs.getString("productName"));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- try {
- rs.close();
- cs.close();
- conn.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
3.Java调用存储过程
重点语句截取,其它参照上面例题
1)调用无参数的存储过程
- sql="{call proc_viewProduct}";
- CallableStatement cstmt=conn.prepareCall(sql);
- ResultSet rs=cstmt.executeQuery();
- while(rs.next)
- System.out.println(rs.getString("productName"));
2)有输入参数
- sql="{call proc_FindByProducts(?)}";
- sctmt.setString(1,"%f%");
3)即有输入又有输出
- BasicDataSource basicDataSource = new BasicDataSource();
- basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- basicDataSource.setUrl("jdbc:sqlserver://localhost:1433;DatabaseName=Northwind");
- basicDataSource.setUsername("sa");
- basicDataSource.setPassword("qaz123");
- String sql = "{call proc_ViewProduct}";
- sql = "{call proc_FindByProductNameFromProduct(?)}"; //输入参数
- sql = "{call proc_FindProductNameOutPut(?,?)}"; //输出参数
- //sql = "{call fyproduct(?,?)}";
- try {
- Connection conn = basicDataSource.getConnection();
- CallableStatement cstmt = conn.prepareCall(sql);
- //cstmt.setInt(1,2);
- cstmt.setString(1,"'%f%'");
- cstmt.registerOutParameter(2,java.sql.Types.INTEGER);
- ResultSet rs = cstmt.executeQuery();
- while(rs.next()){
- System.out.println(rs.getString("productName"));
- }
- System.out.println(cstmt.getInt(2));
- rs.close();
- cstmt.close();
- conn.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
J2EE调用存储过程就介绍到这里。
【编辑推荐】