public List getNodeDataSearch(String nt, String registerId, String employID,
int num, String batchNumber, String rperson,
String dateNum, String notNode, String districtCode) {

DBConnectionManager connManager = null;
Connection conn = null;
Commons Common = new Commons();

List ls = new ArrayList();
try {
connManager = DBConnectionManager.getInstance();
conn = connManager.getConnection("oracleHouse");
int n = 1;
if (nt.equals("new"))
n = 3;
CallableStatement procTemp = null;
if (nt.equals("99")) {
nt = "6";
procTemp = conn.prepareCall("{ call SP_NODEDATASEARCHWAIT.listData(?,?,?,?,?,?,?) }");
} else {
procTemp = conn.prepareCall("{ call SP_NODEDATASEARCH3.listData(?,?,?,?,?,?,?,?,?,?) }");
}

            String tempNum = "";

if(num>0)
tempNum = num+tempNum;


procTemp.setString(1, nt);
procTemp.setString(2, registerId);
procTemp.setString(3, employID);
procTemp.setString(4, tempNum);
procTemp.setString(5, batchNumber);
procTemp.setString(6, rperson);
procTemp.setString(7, districtCode);
procTemp.setString(8, dateNum);
procTemp.setString(9, notNode);
procTemp.registerOutParameter(10, oracle.jdbc.OracleTypes.CURSOR);


procTemp.executeQuery();
ResultSet data = (ResultSet) procTemp.getObject(10);
while (data.next()) {
Vector vt = new Vector();

String deptIdTemp = Common.chgstr(data.getString("deptId")); String registerID = Common.chgstr(data.getString("register_id"));
vt.add(registerID);
String moduleID = data.getString("moduleId");
vt.add(Integer.valueOf(moduleID));

String businessName = Common.chgstr(data
.getString("business_name"));
vt.add(businessName);
String businessSubName = Common.chgstr(data
.getString("business_subname"));
vt.add(businessSubName);
String node = data.getString("node");
vt.add(node);
String nodename = Common.chgstr(data.getString("nodename"));
vt.add(nodename);

String owner = PersonRelationBean.findOwnerName(registerID);
vt.add(owner);
String statusName = Common.chgstr(data.getString("statusname"));
vt.add(statusName);
String name = Common.chgstr(data.getString("person"));
vt.add(name);
vt.add(data.getInt("businessID"));

vt.add(data.getInt("subBusinessID"));

vt.add(data.getInt("handleType"));

vt.add(data.getInt("menuswitch"));

vt.add(data.getInt("selectflag"));
String nodetype = data.getString("nodetype");
vt.add(nodetype);
String registertime = data.getString("rtime");
vt.add(registertime);
String btnum = Common.chgstr(data.getString("batchNumber"));
vt.add(btnum);
vt.add(deptIdTemp);
ls.add(vt);
}
data.close();
直接运行data.close();为什么中间while没有执行呢?请各位帮忙,谢谢!

解决方案 »

  1.   

    你确定procTemp.getObject(10)能得到结果集么???
    肯定procTemp.getObject(10)为空,根本就没有。
    你试试在pl/sql里执行存储过程试试结果
      

  2.   


    怎么在pl/sql中执行存储过程,其实上面用的存储过程我都不是很明白,能帮我解释一下吗?谢谢了
      

  3.   

    一定有报错信息的吧。还有这里奇怪
    procTemp.executeQuery();
    ResultSet data = (ResultSet) procTemp.getObject(10);是不是应该是下面这样? (2句改成下面1句。)
    ResultSet data = (ResultSet)procTemp.executeQuery();
      

  4.   

    ResultSet data = (ResultSet) procTemp.getObject(10);
    看看这一行data的下一行指针是否存在
      

  5.   


    没有报错信息,就是不往while()这个语句中跳呢?
      

  6.   

    那证明以你传入的参数来执行存储过程根本就没有得到结果集。
    你用PL/SQL developer里package body里找到相应的存储过程,?号的值用真正的值替换,
    然后test执行就好了。
    或者在sql*plus里直接执行也行。
    网上搜一下如果执行存储过程就好了
      

  7.   

    写法是没有问题的,因为注册的返回类型是OracleTypes.CURSOR。
      

  8.   

    flagiris (菖蒲芭芭)这位高手,请问您点问题,谢谢!
     ——————————————————————————————————————————
     这个和方法传的参数有关系吗,至于这个参数我不是很明白,就是知道值得就传了,不知道的用null表示的,不知道这里会出现问题吗?还有这个存储过程是不是先往里面存储然后再读出来是这样吗?是不是我存储的就不对,所以读取的时候就肯定不对了吧,是这样吗?我思路不是很清晰,望高人指点,谢谢!一定有报错信息的吧。还有这里奇怪
    p……
    [/Quote]
      

  9.   


     这个和方法传的参数有关系吗,至于这个参数我不是很明白,就是知道值得就传了,不知道的用null表示的,不知道这里会出现问题吗?还有这个存储过程是不是先往里面存储然后再读出来是这样吗?是不是我存储的就不对,所以读取的时候就肯定不对了吧,是这样吗?我思路不是很清晰,望高人指点,谢谢!
      

  10.   

    综上所述,感觉应该问题不是出在你代码上,而是出在存储过程上,可能是存储过程执行后就没有查询结果,设个断点获取所有参数值,然后在pl/sql中的Procedures文件夹中选中要执行的存储过程,右键->Test,然后把参数值输入下面的value中,F8看什么情况