有一个查询方法。返回类型是二维数组,这个方法里有四条sql语句分别是这样取的值if(rs.next()){ trt[0]=new String[9];strt[0][0]=rs.getString(1);System.out.println(strt[0][0]);在控制台可以输出着四条sql语句,但它放回是null然后一条数据,然后又是两天null,为什么会是放回是空值那?不知道看不看的明白

解决方案 »

  1.   

    trt[0]=new String[9] 你打错了吧,是strt吧
    没看明白,楼主可以在说明白点,或者把这个方法的代码贴一下
      

  2.   

    public String[][] getSysAll(String xian,String family_no){
    StringBuffer sql=null;
    GetYears getyears=new GetYears(jdbc);
    String years=getyears.Get_years(xian);
    String[][] strt=new String[4][];
    //List<List<String>> str = new ArrayList<List<String>>();
    //List<String> str1 = new ArrayList<String>();
    //List list=new ArrayList();
    //String returns=null;
    try {
    sql=new StringBuffer();
    sql.append(" SELECT A.D301_01||'_'||A.D301_02||'_'||A.D301_03||'_'||A.D301_04||'_'||A.D301_05||'_'||A.D301_06||'_'||A.D301_07");
    sql.append(" ||'_'||A.D301_08||'_'||A.D301_09||'_'||A.D301_10||'_'||A.D301_11||'_'||A.D301_12");
    sql.append(" ||'_'||A.D301_13||'_'||A.D301_14||'_'||A.D301_15||'_'||A.D301_16||'_'||A.D301_17||'_'||A.D301_18");
    sql.append(" ||'_'||A.D301_19||'_'||A.D301_20||'_'||A.D301_21||'_'||A.D301_22||'_'||A.D301_23||'_'||A.D301_24||'_'||A.D301_25");
    sql.append(" ||'_'||A.FAMILY_STATE||'_'||A.YEARS||'_'||ADDRESS||'_'||A.D401_10_TEMP,");
    sql.append("  FN_GET_D401_10_TEMP(A.D301_02, A.YEARS, A.D301_01) D401_10_TEMP ");  
    sql.append(" FROM D301  A ,D401 B WHERE A.D301_02='"+xian+"' AND A.YEARS='"+years+"' AND A.D301_01='"+family_no+"'");
    sql.append(" AND A.D301_01=B.D401_20");
    sql.append(" AND A.D301_02 = B.D401_19 ");
    SqlRowSet rs=jdbc.queryForRowSet(sql.toString());
    if(rs.next())
    {  
    strt[0]=new String[9];
    strt[0][0]=rs.getString(1);
    System.out.println(strt[0][0]);
    }
    } catch (Exception e1) {
    e1.printStackTrace();
    }

    try {
    sql=new StringBuffer();
    sql.append(" SELECT  '<' || D401_21 || '>'|| A.D401_01||'_'||A.D401_02||'_'||A.D401_03||'_'||TO_CHAR(A.D401_04,'YYYY-MM-DD')||'_'||A.D401_05||'_'||A.D401_06||'_'||A.D401_07");
    sql.append(" ||'_'||A.D401_08||'_'||A.D401_09||'_'||A.D401_10||'_'||A.D401_11||'_'||A.D401_12");
    sql.append(" ||'_'||A.D401_13||'_'||A.D401_14||'_'||A.D401_15||'_'||A.D401_16||'_'||A.D401_17||'_'||A.D401_18");
    sql.append(" ||'_'||A.D401_19||'_'||A.D401_20||'_'||A.D401_21||'_'||A.D401_22||'_'||A.D401_23||'_'||A.D401_24||'_'||A.D401_25");
    sql.append(" ||'_'||A.D401_26||'_'||A.D401_27||'_'||A.D401_28||'_'||A.D401_29||'_'||A.BOOK_STATE||'_'||A.STATE||'_'||A.YEARS");
    sql.append(" ||'_'||A.D401_10_TEMP||'_'||A.FAMILY_NO||'_'||A.IDENTITY||'_'||A.D401_10_TEMP2||'_'||A.D401_STATU||'_'||A.D401_INTEGRAL");
    sql.append(" FROM D401   A WHERE A.D401_19='"+xian+"' AND A.YEARS='"+years+"' AND A.D401_20='"+family_no+"'");
    sql.append(" ORDER BY D401_21");
    SqlRowSet rs = jdbc.queryForRowSet(sql.toString());
    while(rs.next())
    {  
    strt[0]=new String[3];
    strt[0][1]=rs.getString(1);
    System.out.println(strt[0][1]);
    }
    } catch (Exception e1) {
    e1.printStackTrace();
    }

    try
        {
    sql=new StringBuffer();
    sql.append(" SELECT  D404_01 || '_' || D404_02 || '_' ||");
    sql.append(" D404_03 || '_' || D404_04 || '_' ||");
    sql.append(" TO_CHAR(D404_05, 'YYYY-MM-DD') || '_' || D404_06 || '_' ||");
    sql.append(" D404_07 || '_' || D404_08 || '_' || D404_09 || '_' || D404_10 || '_' ||");
    sql.append(" D404_11 || '_' || D404_12 || '_' || D404_13 || '_' || D404_14 || '_' ||");
    sql.append(" D404_15 || '_' || D404_16 || '_' || D404_17 || '_' || D404_18 || '_' ||");
    sql.append(" D404_19 || '_' || D404_20 || '_' || AREA_CODE || '_' || YEARS || '_' ||");
    sql.append(" D404_21 || '_' || D404_22  D40401");
    sql.append(" FROM D404");
    sql.append(" WHERE AREA_CODE = '"+xian+"'");
    sql.append(" AND YEARS = '"+years+"'");
    sql.append(" AND D404_21 = '"+family_no+"'");
    sql.append("ORDER BY D404_22");;
        System.out.println("sql**********="+sql);
        SqlRowSet rs=jdbc.queryForRowSet(sql.toString());
    while(rs.next())
    {  
    strt[0]=new String[9];
    strt[0][2]=rs.getString(1);
    System.out.println(strt[0][2]);
    }
        
      }
       catch(Exception e)
        {
       e.printStackTrace();
        }
       try{
        sql=new StringBuffer();
        sql.append(" SELECT D601_01 || '_' || D601_02 || '_' || D601_03 || '_' || D601_04 || '_' ||");
    sql.append(" D601_05 || '_' || TO_CHAR(D601_06, 'YYYY-MM-DD') || '_' ||");
    sql.append(" TO_CHAR(D601_07, 'YYYY-MM-DD') || '_' ||");
    sql.append(" TO_CHAR(D601_08, 'YYYY-MM-DD') || '_' || D601_09 || '_' || D601_10 || '_' ||");
    sql.append(" D601_11 || '_' || D601_12 || '_' || D601_13 || '_' || D601_14 || '_' ||");
    sql.append(" D601_15 || '_' || D601_16 || '_' || D601_17 || '_' || D601_18 || '_' ||");
    sql.append(" D601_19 || '_' || AREA_CODE || '_' || YEARS || '_' ||");
    sql.append("  TC_APPROPRIATE || '_' || TC_REMAIN");
    sql.append("    FROM D601");
    sql.append("   WHERE AREA_CODE = '"+xian+"'");
    sql.append("     AND YEARS = '"+years+"'");
    sql.append("     AND D601_02 = '"+family_no+"'");
    SqlRowSet rs=jdbc.queryForRowSet(sql.toString());
    while(rs.next())
    {  
    strt[0]=new String[6];
    strt[0][3]=rs.getString(1);
    System.out.println(strt[0][3]);
    }
       }catch(Exception e)
       {
    e.printStackTrace();   
       }
        return strt;
    }
    这是代码?
      

  3.   

    首先print一下sql,拿到pl/sql里执行一下是否正确
    然后搂住是不是只想看每次循环的System.out.println(strt[0][3]);啊while(rs.next())
    {   
    strt[0]=new String[6];
    strt[0][3]=rs.getString(1);
    System.out.println(strt[0][3]);
    }你每次查询都是这样,strt[0]在每次循环的时候都被赋予了新值,以前的值就没有了
    执行完第一次sql,strt[0][0]中有值,然后执行第二个sql,在第一个循环里,strt[0]被重新定义成一个新的数组,并给这个新数组赋值,这样写没意义啊
    如果想在strt[0][0],strt[0][1],strt[0][2],strt[0][3]中保存值,那么就把每次循环里定义strt[0]的语句去掉,在最前面定义一次就可以了