出错位置的程序代码如下:
try{
     ResultSet rs=mydb.executeQuery(sql);
     ResultSetMetaData rsmd = rs.getMetaData();
     teststring=String.valueOf(rs.getRow());
     teststring=teststring+"  "+String.valueOf(rsmd.getColumnCount());
     if (rsmd.getColumnCount()==0) return null;
     temp1=new String[rsmd.getColumnCount()];
     while(rs.next()){
        for(int j=1;j<=rsmd.getColumnCount();j++){
         temp1[j-1]=rs.getString(j);
         teststring=teststring.concat(",").concat(temp1[j-1]);
        }
        tempv.add((String[])temp1.clone());
     }    }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
 还有其它的sql可以运行,所以我觉得程序没多大问题!
输出来的sql我在sql server 上,可以通过运行!

解决方案 »

  1.   

    你在temp1[j-1]=rs.getString(j);下面加System.out.println(j);
    看看是什么时候抛出的异常
      

  2.   

    temp1[j-1]=rs.getString(j);抛出的异常 
            
      

  3.   

    现在我有个很大的疑问,那就是在sql server上可以运行的sql,在java里有没有限制!
      

  4.   

    回复人: xmvigour(微电) (2001-12-30 15:46:03)  得0分 
    现在我有个很大的疑问,那就是在sql server上可以运行的sql,在java里有没有限制!  没有,java和sql无关。
      

  5.   

    问题出在rs.next()上,只要你对取回来的数据有任何操作,就不需要执行第一次的rs.next(),因为你上面已经用了
    teststring=String.valueOf(rs.getRow()); teststring=teststring+"  "+String.valueOf(rsmd.getColumnCount());
    所以你不可以用while(rs.next())因为到了最后一次的时候rs.next()是返回null,而while只能判断true和false,所以问题出在这里!
      

  6.   

    to ycats(加菲猫): 
    j=1时发生的 
    to ahtu(阿土):
    如果程序有问题的话,我其它的sql都可以运行,并得到正确的结果!
    to Mars_lee(二子):
    我也希望如此,但为什么有些sql可以pass,但有些就是会出错?
      

  7.   

    刚刚说错了一点,不好意思,我刚刚看了我自己的程序我自己的程序里面一直这样用的,我有一个是一开始就取值的话就要先next,如果我取了列的数量的话就要先用if (!rs.next())来判断,特别是如果只有一条记录的话如果控制不好很容易出错
      

  8.   

    刚刚说错了一点,不好意思,我刚刚看了我自己的程序我自己的程序里面一直这样用的,我有一个是一开始就取值的话就要先next,如果我取了列的数量的话就要先用if (!rs.next())来判断,特别是如果只有一条记录的话如果控制不好很容易出错
      

  9.   

    死马当活马医了,试试下面的try{
        ResultSet rs=mydb.executeQuery(sql);
        ResultSetMetaData rsmd = rs.getMetaData();
        int colNum=rsmd.getColumnCount();
        if (colNum==0) return null;
        temp1=new String[colNum];
        while(rs.next()){
            for(int j=1;j<=colNum;j++){
            temp1[j-1]=rs.getString(j);
            teststring=teststring.concat(",").concat(temp1[j-1]);
            }
            tempv.add((String[])temp1.clone());
        }    }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
    还有,你干吗非得在程序中得到列数呢?你难道会不知道有几列?
      

  10.   

    to : ahtu(阿土):
    这个程序判断是我写的一个方法中的一个判断,我返回的是一个String[][];
    teststring=teststring.concat(",").concat(temp1[j-1]);
    是当初我用来了解程序运行的情况,看看到了那一步!还有这个程序我已用了很久了,一直都好好的!   不过还是谢谢z_yheart(年轻的心)。 
    to z_yheart(年轻的心):     
    “你干吗非得在程序中得到列数呢?你难道会不知道有几列? ”
    因为我比较懒,所以我是写一个比较通用的可以执行sql的方法!
      

  11.   

    我觉得如果还不行的话,就改用直接用JDBC连接试试,说不定是jdbc-odbc桥的驱动问题
      

  12.   

    to : z_yheart(年轻的心):
    我也觉可能是jdbc-odbc桥的驱动问题,但我提出来问问大家,了解一下,到底java和sql的关系是怎么样?免得以后再碰上这种鸟问题!:)) 
      

  13.   

    java中,记录集的列数是从零开始的还是从1开始?
      

  14.   

    to dlight(阿贞) :
    java中,记录集的列数是从1开始
      

  15.   

    嗨嗨,各位老大,发发言吧,讨论一下,java和sql的关系!
      

  16.   

    嗨嗨,各位老大,发发言吧,讨论一下,java和sql的关系! 
      

  17.   

    回复人: xmvigour(微电) (2001-12-30 15:35:24)  得0分 
    出错位置的程序代码如下:
    try{
        ResultSet rs=mydb.executeQuery(sql);
        ResultSetMetaData rsmd = rs.getMetaData();
        teststring=String.valueOf(rs.getRow());
        teststring=teststring+"  "+String.valueOf(rsmd.getColumnCount());
        if (rsmd.getColumnCount()==0) return null;
        temp1=new String[rsmd.getColumnCount()];
        while(rs.next()){
            for(int j=1;j<=rsmd.getColumnCount();j++){
            temp1[j-1]=rs.getString(j);
            teststring=teststring.concat(",").concat(temp1[j-1]);
            }
            tempv.add((String[])temp1.clone());
        }    }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
    还有其它的sql可以运行,所以我觉得程序没多大问题!
    输出来的sql我在sql server 上,可以通过运行!  其它的sql是怎样写的,这个sql又是怎样写的,写出来大家一起看看,还有直接运行sql的结果是怎样的?
      

  18.   

    是这样的,我在sql中用了sql server 的left outer join 连了一大堆,结果在java里一运行就出错,但有时不出错,所以很纳闷!
    然后我改用视图,就是尽量是在java中传递简化的sql String ,但还是不行,就是只有很简单的比如“select a,b,c from aview”这样,它还是出现同样的错,上次好像谁说过,jdbcodbc不稳定,我猜可能是这个原因,所以我想大家把这方面的问题谈论清楚,毕竟我们经常要和数据库打交道的!
      

  19.   

    因为视图并不是物理存在的,因此你这两种方法在进行数据库操作时是一样的。
    我想有可能是jdbc_odbc对复杂的sql语句支持不够吧
      

  20.   

    jdbc_odbc对复杂的sql语句支持不够吧,可能是这样,我认同! 
      

  21.   

    这个报错我也遇到过,感觉原因是JdbcOdbc的driver有问题,
    我是这样解决的:尽量避免用resutSet.getString("colName") 来读取数据,使用resultSet.getString(index)来读取,这样稳定多了譬如
    sql="SELECT a,b,c from table t";
    那么取field a 应该是
    String lvA=lvResult.getString(1);
    String lvB=lvResult.getString(2);
    String lvC=lvResult.getString(3);这样处理基本上就不再出错了.