为什么老是同一条纪录 你肯定你的返回Vector包含所有记录?????? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把方法mysqlOperate()的源码贴出来 对呀,不知道你的bean是怎么写的,贴出来研究研究!! system.out.println(outVlaue [1]);应该改成 system.out.println(outVlaue [i])吧?也可以用lastElement() ,firstElement()试试 大家看: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 ; }} 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); 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);} while (Rs.next ()) { for(i=0;i<fieldSum;i++) { ArrValue[i] = Rs.getString (i+1); System.out.println(ArrValue[i]); }在myclassbean输出都正常呀! vVector.addElement (ArrValue);这里必须改为vVector.addElement ((String[])ArrValue.clone());你试试看! 我没有做过将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);} vVector.addElement ((String[])ArrValue.clone());修改后问题依旧?为什么总是取最后一条记录? 我没有做过将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);} Hello 帥哥我前面說的方法你試了沒有 vVector.addElement ((String[])ArrValue.clone());修改后问题依旧?为什么总是取最后一条记录?-------------------------------------先把你的.class删除 然后如果是jsp的把web service关掉然后按我的改了 重新编译一下!应该没问题 因为这个问题我遇到过 就是这么解决的! 或者像 lifeiqhp(飛哥) 说的 每一个记录重新new一下! lifeiqhp(飛哥) 我试过new 还是老样子我正在试: xmvigour(微电--有狼的气质 没狼的勇气 真郁闷) .... btw:楼主你不会是写在jsp上面的吧?如果是的话,系统需要重新编译才会有效的…… alphazhao(绿色咖啡)谢谢!ok...................ok....ok!! 多谢alphazhao(绿色咖啡) 问题已经解决!将String[]数组改为vector就行了!马上结贴!祝大家中秋快乐! 关于继承中protected问题 关于Random() 和net.mindView.util.Print Jvav编程,设计《赤色要塞》这款游戏 String对象问题~!!!!急急急 问个递归的问题,有点迷糊了。 JAVA初学者请教各位大神 JList简单问题,在线放分!!! 初学java,请求帮助 我都快没信心了,一个连接MySQL的程序!!! to:可怜的NB的夜叉先生:请版主不要del 刚才发现了一个很严重的问题,java传递参数的时候不能检查正确? 请帮我看一下问题出在哪里(小程序)?
应该改成 system.out.println(outVlaue [i])吧?
也可以用lastElement() ,firstElement()试试
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 ;
}
}
{
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);
你最后输出的是从数据库表中提取的第二个字段数据
贴出你的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);
}
for(i=0;i<fieldSum;i++) {
ArrValue[i] = Rs.getString (i+1);
System.out.println(ArrValue[i]);
}
在myclassbean输出都正常呀!
这里必须改为vVector.addElement ((String[])ArrValue.clone());
你试试看!
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);
}
修改后问题依旧?为什么总是取最后一条记录?
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);
}
修改后问题依旧?为什么总是取最后一条记录?
-------------------------------------
先把你的.class删除 然后如果是jsp的把web service关掉
然后按我的改了 重新编译一下!
应该没问题 因为这个问题我遇到过 就是这么解决的!
我正在试: xmvigour(微电--有狼的气质 没狼的勇气 真郁闷) ....