你肯定你的返回Vector包含所有记录??????

解决方案 »

  1.   

    你把方法mysqlOperate()的源码贴出来
      

  2.   

    对呀,不知道你的bean是怎么写的,贴出来研究研究!!
      

  3.   

    system.out.println(outVlaue [1]);
    应该改成 system.out.println(outVlaue [i])吧?
    也可以用lastElement() ,firstElement()试试
      

  4.   

    大家看:
    public class MyclassBean
    {
    /**
     * @operateOption 1 : insert
     * @ 2 : update
     * @ 3 : select
     * @ 4 : delete
     * @fieldSum 字段总数
     * @StrSQL              SQL语句
     * @return Vector
     */
    public static Vector mysqlOperate(String operateOption,String StrSQL,int fieldSum)
    {
    Vector vVector =new Vector ();
    Connection Conn = null;
    Statement  Stmt = null;
    ResultSet  Rs   = null;
    String UserName = "admin";
    String Password = "system";
    String DriverName = "com.mysql.jdbc.Driver";
    String SourceUrl  = "jdbc:mysql://localhost:3306/Examsys?";
    String[] ArrValue = new String [fieldSum];
    int i;
    try
    {
    Class.forName(DriverName).newInstance();
    Conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/Examsys?user=admin&password=system&useUnicode=true&characterEncoding=big5");
    Stmt=Conn.createStatement();
    //insert
    if(operateOption.equals ("1"))
    {
    Stmt.executeUpdate (StrSQL);
    }
    //update
    if(operateOption.equals ("2"))
    {
    Stmt.executeUpdate (StrSQL);
    }
    //select
    if(operateOption.equals ("3"))
    {
    Rs = Stmt.executeQuery(StrSQL);

    while (Rs.next ())
    {
    for(i=0;i<fieldSum;i++)
    {
    ArrValue[i] = Rs.getString (i+1);
    }
    vVector.addElement (ArrValue);
    }
    }
    //delete
    if(operateOption.equals("4"))
    {
    Stmt.executeUpdate(StrSQL);
    }
    } catch (Exception ex)
    {
    ex.printStackTrace ();
    }
    finally
    {
    try
    {
    if (Rs !=null)
    {  
    Rs=null;
    }
        if(Stmt !=null)
    {
    Stmt.close ();
    Stmt=null;
    }
    if(Conn!=null)
    {
    Conn.close ();
       Conn=null;
    }
    }
    catch (Exception ex)
    {
    ex.printStackTrace();
    }
    }
    return vVector ;
    }
    }
      

  5.   

    while (Rs.next ())
    {
        for(i=0;i<fieldSum;i++)
    {
    ArrValue[i] = Rs.getString (i+1);
             }
    vVector.addElement (ArrValue);
    將上面的代碼改為;
    while (Rs.next ())
    {
        ArrValue=new String[fieldSum];//  please note
        for(i=0;i<fieldSum;i++)
    {
    ArrValue[i] = Rs.getString (i+1);
             }
    vVector.addElement (ArrValue);
      

  6.   

    system.out.println(outVlaue [1]);
    你最后输出的是从数据库表中提取的第二个字段数据
    贴出你的StrSQL语句看看你是否是提取了两个以上字段数据?另外检验一下你的数据库记录中,每条记录的第二个字段是否都有值?
    建议你在每次提取数据的时候输出看看:
    while (Rs.next ()) {
      for(i=0;i<fieldSum;i++) {
        ArrValue[i] = Rs.getString (i+1);
        //添加:看看是否真的取到了第2个字段的值?
        System.out.println(ArrValue[i]);
      }
      vVector.addElement (ArrValue);
    }
      

  7.   

    while (Rs.next ()) {
      for(i=0;i<fieldSum;i++) {
        ArrValue[i] = Rs.getString (i+1);
        System.out.println(ArrValue[i]);
      }
    在myclassbean输出都正常呀!
      

  8.   

    vVector.addElement (ArrValue);
    这里必须改为vVector.addElement ((String[])ArrValue.clone());
    你试试看!
      

  9.   

    我没有做过将String[]作为object对象放入vector的,我怀疑是这方面的读取问题,当然具体的我敢下定论。不过解决方法还是有的,将String[]数组改为vector就行。比如你的MyclassBean.mysqlOperate方法内的select部分改为:去掉//String[] ArrValue = new String [fieldSum];while (Rs.next ()) {
      Vector ArrValue = new Vector();//暂存一条结果记录
      for(i=0;i<fieldSum;i++) {
        //ArrValue[i] = Rs.getString (i+1);改为
        ArrValue.addElement(Rs.getString(i+1));
      }
      vVector.addElement (ArrValue);
    }调用的时候改为:
    vVector = MyclassBean.mysqlOperate("3",StrSQL,2);
    for(i=0;i<vVector.size();i++)
    {
      System.out.println(vVector.size ()+"a2");
      Vector outVlaue = (Vector)vVector.elementAt(i);
      
      String s1 = (String)outVlaue.get(0);//第一字段
      String s2 = (String)outVlaue.get(1);//第二字段
      system.out.println(s1);
      system.out.println(s2);
    }
      

  10.   

    vVector.addElement ((String[])ArrValue.clone());
    修改后问题依旧?为什么总是取最后一条记录?
      

  11.   

    我没有做过将String[]作为object对象放入vector的,我怀疑就是这方面的读取问题,当然具体的我敢下定论。不过解决方法还是有的,将String[]数组改为vector就行。比如你的MyclassBean.mysqlOperate方法内的select部分改为:去掉//String[] ArrValue = new String [fieldSum];while (Rs.next ()) {
      Vector ArrValue = new Vector();//暂存一条结果记录
      for(i=0;i<fieldSum;i++) {
        //ArrValue[i] = Rs.getString (i+1);改为
        ArrValue.addElement(Rs.getString(i+1));
      }
      vVector.addElement (ArrValue);
    }调用的时候改为:
    vVector = MyclassBean.mysqlOperate("3",StrSQL,2);
    for(i=0;i<vVector.size();i++)
    {
      System.out.println(vVector.size ()+"a2");
      Vector outVlaue = (Vector)vVector.elementAt(i);
      
      String s1 = (String)outVlaue.get(0);//第一字段
      String s2 = (String)outVlaue.get(1);//第二字段
      system.out.println(s1);
      system.out.println(s2);
    }
      

  12.   

    Hello 帥哥我前面說的方法你試了沒有
      

  13.   

    vVector.addElement ((String[])ArrValue.clone());
    修改后问题依旧?为什么总是取最后一条记录?
    -------------------------------------
    先把你的.class删除 然后如果是jsp的把web service关掉
    然后按我的改了 重新编译一下!
    应该没问题 因为这个问题我遇到过 就是这么解决的!
      

  14.   

    或者像 lifeiqhp(飛哥) 说的 每一个记录重新new一下!
      

  15.   

    lifeiqhp(飛哥) 我试过new 还是老样子
    我正在试: xmvigour(微电--有狼的气质 没狼的勇气 真郁闷) ....
      

  16.   

    btw:楼主你不会是写在jsp上面的吧?如果是的话,系统需要重新编译才会有效的……
      

  17.   

    alphazhao(绿色咖啡)谢谢!ok...................ok....ok!!
      

  18.   

    多谢alphazhao(绿色咖啡)  问题已经解决!将String[]数组改为vector就行了!马上结贴!祝大家中秋快乐!