//通过sqlserver exec方法调用存储过程
stmt = conn.prepareCall("EXEC dbo.sp_Query_GetVehiceTimeOuts '01'");
//jdbc通用语法为
// stmt = conn.prepareCall("{call dbo.sp_Query_GetVehiceTimeOuts(?)}");
// stmt.setString(1, "01");
boolean hashResult = stmt.execute();
while (true) {
//判断本次循环是否为数据集
if (hashResult) {
System.out.println("为数据集");
ResultSet rs = stmt.getResultSet();
// Do something with resultset ...
while (rs.next()){
System.out.println(rs.getString(1));
} else {
System.out.println("本次不为数据集");
int updateCount = stmt.getUpdateCount();
if (updateCount == -1) {
当updateCount为-1时,
代表存储过程返回的最后一条数据集
System.out.println("最后一次");
break;
// Do something with update count ...
每次判断下一个是否为了数据集
stmt.getMoreResults() 为 true表示下一次循环为数据集,false为空
hashResult = stmt.getMoreResults();
System.out.println(hashResult);
大体的逻辑就是
首先是死循环,
然后判断提交sql返回的收个数据是否为结果集,
如果是就进入结果集处理,如果不是,通过getUpdateCount方法获取下一个结果,并判断getUpdateCount结果是否为-1,-1代表最后一条结果集,当结果为-1时跳出循环,否则继续循环该段代码
Connection conn = JdbcUtil.getConnection(); CallableStatement stmt = null; //通过sqlserver exec方法调用存储过程 stmt = conn.prepareCall("EXEC dbo.sp_Query_GetVehiceTimeOuts '01'");
因为sqlserver2k的官方驱动问题,一直以来用jdbc没有很好的办法取多结果集,公司系统里采用的是2种方式来搞,一种是增删查改用jdbc方式,对报表统计那块就采用odbc的方式,因为最近要改为连接池访问数据库,所以才有时间专门针对取多结果集的问题进行研究。
原来在odbc中取结果集的方式是
[code="java"]Connection DBConn = null;
Sta...
问题描述:有时使用JDBC进行数据库查询时会返回多个结果集,但是PreparedStatement方式只能接收第一个结果集。
例如在SQL Server中执行sp_help 'test.student',该语句会返回至少7个结果集。
1、使用PreparedStatement进行JDBC操作
public class MSSqlTest {
public static void main...
加载驱动Class.forName创建数据库连接conn= DriverManager.getConnection创建处理块CallableStatement cs = conn.prepareCall放入参数prepareCall.setString执行存储过程prepareCall.execute()关闭连接无参数的存储过程
JDBC编码调用
带参数的存储过程定义
调用存储过程
特殊存储过程参数inout
JDBC调用
存储过程包含多个查询结果集
JDBC调用
MySQL触发器
触发器是一种数据库对象,
oracle 对于高级特性总是与众不同(我极力讨厌这一点,如果使用它的产品就要对这种产品
进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一要定用它自己
的LOB对象,所幸我还能通过LONG RAW来代替....
一般情况下,statement执行execute后只会返回单一结果集,如果想一次返回多个结果集,就得用JDBC驱动的多结果集处理方式。各个数据库厂商有不同的实现方式,但共同的是他们都采用存储过程来实现。
一、Oracle多结果集是基于ref cursor实现的
Create table person (
Id int, name varchar2(50)
)
...
2.连接到数据库
Connection con = DriverManager.getConnection(url, user, password);3.创建statement对象
PreparedStatement statement = con.prepareStatement(sql);
Statement sta
resultset 中的first()、 privious()方法本质上是对移动resultset的指针
指针是否允许移动,在创建statement的时候就已经设置好了,不设置默认只支持顺序,
Statement stmt=con.createStatement(int type,int concurrency);
1、参数 :int type
ResultSet.TYPE_FORWORD...
在.net中,DataSet可以自动接收多个结果集,形成DataTable数组。
使用JAVA时,也想要实现这个效果,百度一顿查找,终于找到解决的办法。
核心方法:CallableStatement ResultSet
具体实现代码:
import java.sql.CallableStatement;
import java.sql.ResultSet;