2012-06-25 3 views
0

나는 sqlite에 초보자입니다. 선택의 여지가없고 자바로 코드를 사용합니다. 요청이 두 개 있지만 reslutat로 반환해야합니다. 반환 값은 아무 것이나 resultSet입니다. org.sqlite.RS @ ..입니다. 제발 도와주세요. 미리 감사드립니다.ResultSet sqlite 다중 다중 열 및 다중 테이블

 public List<String> executeSelect(String ArgRequete, boolean All) throws SQLException 
{ 
    String ReturnColumn = ArgRequete.substring(ArgRequete.indexOf("SELECT")+ 6, ArgRequete.indexOf("FROM")).replaceAll(" ",""); 
    List<String> Str = new ArrayList<String>(); 
    logger.info("ret :"+ReturnColumn); 
    String[] columns=ReturnColumn.split(","); 
    for(String ico:columns){ 
    logger.info(ico); 
    } 
    stmt = con.createStatement(); 

    rs = stmt.executeQuery(ArgRequete); 
    logger.info(ArgRequete); 

    logger.info("mon resultSet:"+rs); 
    if (!All) 
    { 
     if (rs.next()) 
     { 
      String result = ""; 
        for(String aColumn : columns){ 
           result += rs.getString(aColumn) + ","; 
           logger.info(result); 

        } 
        Str.add(result); 
     } 
    } 
    while (rs.next() && All) 
    { 
           String result = ""; 
           for(String aColumn : columns){ 
              result += rs.getString(aColumn) + ","; 
           } 
     Str.add(result); 
    } 
    stmt.close(); 
    return Str; 
} 

    public void etapeParametrerOption(String login) throws IOException, SQLException 
{ 
    assertTrue("Texte 'Paramétrer les options' non présent, voir code source HTML dans LogOut",selenium.isTextPresent("Paramétrer les options")); 

    String [] tab=LogFile.showWSEtAppelCOffrEFrom(login); 
    List<String>ls=new ArrayList<String>(); 

    for(String itab : tab){ 

     ls=dbCOffrE.executeSelect("SELECT busitypid,attblabel FROM t_article art, t_attribute att , t_srvbrick_attr_article srv WHERE att.attbid = srv.attbid and art.artid = srv.artid and att.modoptidmodifiable = '2' and (att.attbinactivationdate is null or att.attbinactivationdate < date('now')) and art.artshortlabel='"+itab+"'",false); logger.info("ma liste :"+ls); 
    }} 

무엇인지 내 파일 로그 (가) 포함

INFO [com.sfr.price.functionalTest.commons.SQLBase.executeSelect](82) [] ret :busitypid,attblabel 
INFO [com.sfr.price.functionalTest.commons.SQLBase.executeSelect](85) [] busitypid 
INFO [com.sfr.price.functionalTest.commons.SQLBase.executeSelect](85) [] attblabel 
INFO [com.sfr.price.functionalTest.commons.SQLBase.executeSelect](90) [] SELECT busitypid,attblabel FROM t_article art, t_attribute att , t_srvbrick_attr_article srv WHERE att.attbid = srv.attbid and art.artid = srv.artid and att.modoptidmodifiable = '2' and art.artshortlabel='8001P' 
INFO [com.sfr.price.functionalTest.commons.SQLBase.executeSelect](93) [] mon resultSet:[email protected] 
INFO [com.sfr.price.functionalTest.scenario.impl.AJLINGE.etapeParametrerOption](799) [] ma liste :[] 
+0

'logger.info ("mon resultSet :"+ rs);'를'logger.info ("mon resultSet :"+ rs.toString());로 바꾸어보세요. 문자열로 변환해야합니다. 사람이 읽을 수있는 물건을 화면에 뱉기 전에 –

+0

rs.toString으로 변경하기 전에이 작업을 수행했으며 항상 동일한 결과 set [email protected] – asmae

+0

SQLiteJDBC를 사용하고 있습니까? –

답변

0

클래스는 기본 오브젝트 클래스의 toString()의 기본 구현을 오버라이드 (override)되지 않았기 때문에 당신의 결과 집합을 인쇄 할 때 [email protected]을 얻고있는 이유입니다. SQLiteJDBC documentation에 따르면 ResultSet을 반복하여 적절하게 값을 출력 할 수 있어야합니다. 이 같은

뭔가 작업을해야합니다 :

while (rs.next()) { 
    logger.info("busitypid = " + rs.getString("busitypid"); 
    logger.info("attblabel = " + rs.getString("attblabel"); 
} 
rs.close(); 

는 또한, 당신의 부울 All의 목적을 이해하지 않습니다. (참고 : Java 스타일 규칙은이 변수의 이름이 all이고 소문자 첫 글자로 지정되어야 함을 나타냅니다.) while 루프와 if 문이 작성되었으므로 열 머리글 또는 만 인쇄됩니다. 결과 세트의 내용. 귀하의 로그 파일의 내용을 기반으로, 나는 당신이 All = false에 합격했다고 가정합니다 - 귀하의 출력이 올바른 것입니다.

+0

을 사용하고 있습니다. 결과 집합을 인쇄 할 때 [email protected] – asmae

+0

* YES *를 표시하기 때문에 resultSet을 반복 할 경우에도이 옵션이 작동하지 않습니다. 이것은 예상된다. org.sqlite.RS 클래스가'toString()'메소드를 오버 라이딩하지 않기 때문에'logger.info ("Resultset ="+ rs);'항상 * "[email protected]" 자바 객체 클래스. 값을보기 위해 실제로 결과 세트에서 데이터를 추출해야합니다. 단지 논리를 구현하지 않으면 직접 인쇄 할 수 없습니다. [이 사이트] (http://www.javabeat.net/2007/08/overriding-the-tostring-method-in-object-class/)에서 더 잘 설명 할 수 있습니다. –

+0

Logger.info ("Resultset ="+ rs)를했을 때 왜 작동하지 않는지 이해해 주셔서 감사합니다.하지만 내 resultSet을 반복 할 때도 항상 동일한 결과를 보입니다. [email protected] – asmae