java如何使用存储过程,持续更新

原创
2016/01/06 15:15
阅读数 42

参考的博文:http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html

由于原博主是使用的.net语言编写,表和结果以及存储过程都是一样的,为了熟悉存储过程,因此使用了一个例子,java语言编写,并且有几个问题希望共同探讨,谢谢!

package com.procedure;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Types;

public class TestProcedure {
	
	public static void main(String[] args) throws Exception {
		DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
		Connection conn =DriverManager.getConnection("jdbc:sqlserver://ip:1433;DatabaseName=数据库", "test", "mima");
		
		//1.//false在这个里面代表没有结果
		CallableStatement c1 =conn.prepareCall("{call inUserAccount()}");
		System.out.println(c1.execute());	
		c1.close();
		
		//2.
		CallableStatement c2 =conn.prepareCall("{?=call inUserAccountRe()}");
		c2.registerOutParameter(1, Types.INTEGER);
		System.out.println(c2.execute());	
		System.out.println("返回值"+c2.getInt(1));
		c2.close();
		
		//3.
		CallableStatement c3 =conn.prepareCall("{call GetUserAccount()}");
		ResultSet rs3=c3.executeQuery();	
		while(rs3.next()){
			System.out.println(rs3.getString("RegisterTime"));
		}
		c3.close();
		
		//4.
		CallableStatement c4 =conn.prepareCall("{call GetUserAccountRe(?,?)}");
		c4.setString(1, "6");
		c4.registerOutParameter(2, Types.INTEGER);
		c4.execute();
		System.out.println(c4.getString(2));
		c4.close();
		
		//5.
		CallableStatement c5 =conn.prepareCall("{?=call GetUserAccountRe1(?,?)}");
		c5.registerOutParameter(1, Types.INTEGER);
		c5.setString(2, "6");
		c5.registerOutParameter(3, Types.INTEGER);
		c5.execute();
		System.out.println(c5.getString(1));
		System.out.println(c5.getString(3));
		c5.close();
		
		//6.
		CallableStatement c6 =conn.prepareCall("{?=call GetUserAccountRe2(?,?)}");
		c6.registerOutParameter(1, Types.INTEGER);
		c6.setString(2, "6");
		c6.registerOutParameter(3, Types.INTEGER);
		ResultSet rs6=c6.executeQuery();
		while(rs6.next()){//这个得放在下面的前面,要不然得不到,也可能和那个存储过程中写的又关系,再验证一下,
			System.out.println("结果集rs6"+rs6.getString("RegisterIP"));
		}
		System.out.println("c6"+c6.getString(1));
		System.out.println("c6"+c6.getString(3));

		c6.close();
		
		//7.这个有个问题是,为什么获取的是第一个执行的结果,第二个执行的结果集呢?
		CallableStatement c7 =conn.prepareCall("{call GetUserAccountRe3()}");
		ResultSet rs7=c7.executeQuery();
		
		int i=0;
		while(rs7.next()){
			System.out.println("结果集rs7"+rs7.getString("RegisterIP"));
			i++;
		}
		System.out.println("jieguoji7数量"+i);
		c7.close();
		System.out.println("guoqu");
		
		
		
		/*//8.
		CallableStatement c8 =conn.prepareCall("{?=call GetUserAccountRe4(?,?)}");
		c8.registerOutParameter(1, Types.INTEGER);
		c8.setString(2, "6");
		c8.registerOutParameter(3, Types.INTEGER);
		ResultSet rs8=c8.executeQuery();

		System.out.println("c8"+c8.getString(1));
		System.out.println("c8"+c8.getString(3));
		//这个得放在下面的前面,要不然得不到,也可能和那个存储过程中写的又关系,再验证一下,这个是错误的
		//因为return相当于是存储过程结束,因此后面的不行了,结果集永远是在返回值的前面s
		while(rs8.next()){
			System.out.println("结果集rs8"+rs6.getString("RegisterIP"));
		}
		c8.close();*/
		
		conn.close();
	}
}

然后第7个有一个问题,我存储过程中定义了两个结果集,为什么在java中只能返回第一个结果集,有没有办法返回第二个结果集,谢谢!





展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部