2012-08-31 3 views
0

데이터베이스에 존재하는 특정 키워드를 검색하여 보여주고 싶었습니다.sqlite에서 데이터베이스의 특정 문자열을 검색하는 방법

다음은 검색 클래스 내 코드입니다 :

String s = kw.getText().toString(); 

sqlhandler show = new sqlhandler(this); 
show.open(); 
String rname = show.getName(s); 
show.close(); 
tv.setText(rname); 

그리고 여기 내 데이터베이스 클래스의 :

public String getName(String kw) { 

    String[] columns = new String[] {NAME, APRICE, DPRICE, VENDOR, KEYWORD }; 

    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "DPRICE like " + "'%"+ kw+"%'", null, null, null, null); 

    String sresult = ""; 

    int iname = c.getColumnIndex(NAME); 
    int iap = c.getColumnIndex(APRICE); 
    int idp = c.getColumnIndex(DPRICE); 
    int ivendor = c.getColumnIndex(VENDOR); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     sresult = sresult + c.getString(iname)+ " "+c.getString(iap) 
      + " " + c.getString(idp) + " " + c.getString(ivendor) 
     + "\n"; 
    } 

    return sresult; 
} 

내 문제가 여기에 무엇입니까? 나는 그것을 실행할 때마다 계속 힘을 얻고있다.

+6

전체 예외 스택 게시. – kosa

답변

0
당신은 내가 단지 추측 수있는 로그 캣을 게시하지 않은 때문에

하지만 절은 의심스러운 :

DPRICE + " like ..." 
: 나는 DPRICE 가정

"DPRICE like ..." 

실제 열 이름 변수 아니다

:

또한 나는 몇 가지 권장 사항이

  • SQL injection attacks을 방지하려면 selectionArgs 매개 변수를 사용하십시오.
  • 데이터를 표시하려면 ListView and SimpleCursorAdapter을 사용해보십시오.
  • 사용중인 열만 선택하십시오.
  • for 루프 대신 while 루프를 사용하여 커서를 반복합니다 (for 루프는 필요한 작업을 세 번 수행함). 모두 함께

: 여기

public String getName(String kw) { 
    String[] columns = new String[] {NAME, APRICE, DPRICE, VENDOR}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, DPRICE + " like ?", new String[] {"'%" + kw + "%'"}, null, null, null, null); 

    int iname = c.getColumnIndex(NAME); 
    int iap = c.getColumnIndex(APRICE); 
    int idp = c.getColumnIndex(DPRICE); 
    int ivendor = c.getColumnIndex(VENDOR); 

    // moveToNext() returns true when there is more data to read 
    //  or false when the cursor isAfterLast() 
    StringBuilder builder = new StringBuilder(); 
    while (c.moveToNext()) { 
     builder.append(c.getString(iname).append(" ") 
       .append(c.getString(iap).append(" ") 
       .append(c.getString(idp).append(" ") 
       .append(c.getString(ivendor).append("\n"); 
    } 

    return builder.toString(); 
} 

는 데이터베이스에서 정보를 표시하는 사용자 정의 레이아웃 ListView를 사용하는 방법에 tutorial이다.

관련 문제