create proc getTempRS
@val1 int
as
CREATE TABLE #t(x INT);
INSERT INTO #t VALUES (@val1);
select * from #t
--------------------------------------------
//调用代码
Connection conn = DriverManager.getConnection(dbURL, userName, userPwd);
CallableStatement cs = conn.prepareCall("{call getTempRS(?)}");
cs.setInt(1, 20);
boolean bResult = cs.execute();
ResultSet rs = cs.executeQuery();
-------------------------------------------
这样执行后,得不到rs,请问各位有什么方法能得到临时表的结果集?问题是不是出在临时表的作用范围?如果是,有办法解决吗?
问题补充:
数据库是sql server 2000
把boolean bResult = cs.execute();去掉试试呢
lz照着下面试试看,如果你是oracle
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
public class JDBCDemo {
private boolean useOracleQuery = true;
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@";
private String port = "1521";
private String oracleQuery = "begin ? := sp_get_stocks(?); end;";
private String genericQuery = "{ call ? := sp_get_stocks(?) }";
private Connection conn = null;
public JDBCDemo(String host, String db, String user, String password)
throws ClassNotFoundException, SQLException {
url = url + host + ":" + port + ":" + db;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
}
catch (ClassNotFoundException ex) {
System.out.println("Failed to find driver class: " + driver);
throw ex;
}
catch (SQLException ex) {
System.out.println("Failed to establish a connection to: " + url);
throw ex;
}
}
private void execute(float price) throws SQLException {
String query = useOracleQuery ? oracleQuery : genericQuery;
System.out.println("Query: " + query + "n");
CallableStatement stmt = conn.prepareCall(query);
stmt.registerOutParameter(1, OracleTypes.CURSOR);
stmt.setFloat(2, price);
stmt.execute();
ResultSet rs = (ResultSet)stmt.getObject(1);
while (rs.next()) {
System.out.println(rs.getString(1) + "t" +
rs.getFloat(2) + "t" +
rs.getDate(3).toString());
}