我就不多说了
...
StringBuffer sql = new StringBuffer("SELECT name,... FROM ....");
pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.get("name"));
...
}
...
StringBuffer sql = new StringBuffer("SELECT name,... FROM ....");
pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.get("name"));
...
}
解决方案 »
- java中对象输入输出流中克隆的实现过程
- Graphics类中setXORMode(Color c1)和setPaintMode()两个方法的源代码怎么找?
- 【300分】求漂亮网站或系统封面或登陆界面
- 关于利用i/o流进行文件复制的问题
- 第一天学JAVA请问怎么配置sdk呀?什么进入编辑的界面?
- 谁能给我一段org.w3c.dom.html.HTMLDocument的代码示例,很简单的
- FutureTask 不返回结果
- Vector能否first、last、previous和next浏览?什么方法实现?
- 很可气的问题:double a=20011130;System.out.println("实际是:"+a); 显示结果是2.00111E7
- 哪里有thinking in java (编程思想)中文电子版下载?
- 学习SCHEMA应该学习哪几块,谢谢。
- unix下如何连接数据库?
第二:用StringBuffer定义一个串,然后又去toString,简直是画蛇添足。存储过程是数据库自己定义的,我只想去调用它。比如
CREATE OR REPLACE PROCEDURE test_proc(
v_id OUT students.id%TYPE,
v_first_name OUT students.first_name%TYPE,
v_last_name OUT students.last_name%TYPE)
AS
CURSOR mycur IS
SELECT id,first_name,last_name from students;
BEGIN
OPEN mycur;
FETCH mycur INTO v_id,v_first_name,v_last_name;
WHILE mycur%FOUND LOOP
FETCH mycur INTO v_id,v_first_name,v_last_name;
END LOOP;
END test_proc;
/
可是怎么调都不行,是不是要想定义查询就不能这么定义呀?
之所以用StringBuffer在于sql语句一般是在不同的条件下拼成的,换句话说,就是经常变化,所以StringBuffer要比String效率高些,你要是经常用java的话,我想是应该知道的。
现在说说你的问题,我以前没有在java的sql语句中用过这样的东西,你想想,如果你的程序只是为了使用一次!因为是create一个表,我想你只会调用一次的,这不像update等。为此专门写个方法?你是不是觉得有些浪费?一般在程序里面调用的多半是什么select,update,insert,deleted这样的东东。不知道你对我的想法有什么意见。
Thanks to T. Guirado for the tips. public static int storedProcWithResultSet (String parms) throws Exception
// Stored procedure to be called.
CallableStatement cs = conn.prepareCall
("{? = call mypackage.p_astoreproc (?,?,?,?,?,?,?)}"); // register input parameters
cs.registerOutParameter(1, java.sql.Types.INTEGER); // return code
cs.setString(2, "");
cs.setString(3, "");
cs.setString(4, parms);
// regsiter ouput parameters
cs.registerOutParameter(5, java.sql.Types.CHAR);
cs.registerOutParameter(6, java.sql.Types.CHAR);
cs.registerOutParameter(7, java.sql.Types.CHAR); // Procedure execution
ResultSet rs = cs.executeQuery(); // Note that you need to retrieve the ResultSet _before_ retrieving
// OUTPUT parameters.
if ( rs == null)
System.out.println( "No resultSet!");
else {
// To retrieve columns info.
ResultSetMetaData rsmd = rs.getMetaData();
int nbCol = rsmd.getColumnCount();
int i = 0;
int j = 1;
Vector vResSet = new Vector();
while (rs.next ()) {
System.out.println( "Record " + (i+1));
// putting the ResultSet columns in a vector
for ( j = 1; j <= nbCol ; j++){
vResSet.insertElementAt(rs.getString(j), 0);
vResSet.addElement(rs.getString(j));
} // Reading vector to print ResultSet data
for ( int k = 0 ; k < nbColonnes ; k++ ) {
if ( vResSet.elementAt(k) != null)
System.out.println( vResSet.elementAt(k).toString());
else
System.out.println( "Column " + (k+1) + " Null");
}
i++;
}
} // Retrieving Strored Procedure OUTPUT parameters
System.out.println( "return code of Stored procedure = : " + cs.getInt(1));
// Retrieving OUTPUT parameters
for ( int i = 5 ; i <= 7; i ++)
System.out.println( "parameter " + i + " : " + cs.getString(i)); return cs.getInt(1);
}
你贴出来的和我手头的例子是一样的,但是我想知道这个例子调用的存储过程是怎么写的?如果你有,能不能贴出来让小弟看看,谢谢
其它人我就不说了, 你们说的和我以前的想法一样。
是不是放在Vector里面只是别人一种写法而已,做实验嘛,有什么可奇怪的。faint,我关心的是它为什么能获得ResultSet对象,那个存储过程是怎么写的。
大家不要忽视重点而去看一些不合理的地方。
刚在口气可能重了些,不好意思!主要是讨论问题嘛!呵呵!
CallableStatement cstmt = null ;
ResultSet rs = null ;
String spa = " { call test_proc } ";//test_proc是你的存储过程
conn = getConnection();
cstmt = conn.prepareCall(spa);
rs = cstmt.executeQuery();
rs.next();
String strWelcome = rs.getString(1);
......
据我的经验知道,Oracle 中的存储过程是不能返回记录集的,相关的Oracle返回记录集的东西你可以参考帖子:
http://www.csdn.net/Expert/TopicView2.asp?id=330015&datebasetype=now
你的test_proc这个存储过程是怎么写的?谢谢
to shihb()
你说了半天,能告诉我怎样通过executeQuery()执行oralce定义的存储过程得到一个ResutlSet吗?如果你不会,就关注好了。用SQL大家都会,不用再讨论了,还有并没有人关心怎么存内容,列出来这么多类,累不累呀?
在java版问数据库的问题真累,在Oracle版问那帮人会java的又不多,不爽。
你的test_proc这个存储过程是怎么写的?谢谢
to shihb()
你说了半天,能告诉我怎样通过executeQuery()执行oralce定义的存储过程得到一个ResutlSet吗?如果你不会,就关注好了。用SQL大家都会,不用再讨论了,还有并没有人关心怎么存内容,列出来这么多类,累不累呀?
在java版问数据库的问题真累,在Oracle版问那帮人会java的又不多,不爽。
你的test_proc这个存储过程是怎么写的?谢谢
to shihb()
你说了半天,能告诉我怎样通过executeQuery()执行oralce定义的存储过程得到一个ResutlSet吗?如果你不会,就关注好了。用SQL大家都会,不用再讨论了,还有并没有人关心怎么存内容,列出来这么多类,累不累呀?
在java版问数据库的问题真累,在Oracle版问那帮人会java的又不多,不爽。
你推荐的那个帖子,我看过,我的那个存储过程写法也是从你那里抄袭来的,不好意思,呵呵,谢谢。
看来你是比较有经验的了,最后没有做成功吗?
不是不欢迎,是希望你不要转移大家的视线和注意力,你可以看到,不光是我,同样也有好多网友在关心这个问题。呵呵。
调用存储过程有它的好处,否则大家还研究它干嘛?我们不能只看到我的要求很简单,就能够返回一个ResultSet而已,我们应该看到如果这个实现了,我们就能简单地调用存储过程来实现SQL不能简单实现的复杂工作。
我的那个做法是可行的,只是我当时对Oracle的存储过程不是很熟悉,一开始希望可以像SQL Server那样直接通过存储过程来获得记录集,也想知道更多的方法而已,但其实这样的想法对Oracle是行不通的,必须采用Package、package body来实现返回记录集!
Good luck!