2012-11-16 2 views
1

텍스트 상자에 입력 한 이름을 반환하도록 데이터베이스를 쿼리하고 있습니다. 데이터베이스의 모든 항목을 볼 수 있지만 텍스트 상자를 사용하여 이름을 검색하려고합니다. 이름을 입력하고 검색 버튼을 누르면 로그 고양이는 "해당 열 없음 : john : 컴파일 중 : SELECT 이름, 성별, 키, 나이, 머리카락 상세 정보 WHERE name = john ORDER byandroid에서 오류 - SQLite

?
private void findRecords(){ 
    EditText find = (EditText)findViewById(R.id.nameSearch); 
    EditText name = (EditText)findViewById(R.id.nameFound); 
    EditText gender = (EditText)findViewById(R.id.genderFound); 
    String s = find.getText().toString(); 
    //Long l = Long.parseLong(s); 
    DatabaseClass hon = new DatabaseClass(this); 

    String returnedName = hon.getName(s); 
    String returnedGender = hon.getGender(s); 

    name.setText(returnedName); 
    gender.setText(returnedGender); 

} 


    public String getName(String s) { 
    // TODO Auto-generated method stub 
    String[] columns = new String[] {NAME_COLUMN, GENDER_COLUMN, HEIGHT_COLUMN, AGE_COLUMN, HAIR_COLUMN}; 
    Cursor c = sherlockdb.query(TABLE_NAME, columns, NAME_COLUMN +"="+ s, null, null, null, NAME_COLUMN); 
    if (c != null){ 
     c.moveToFirst(); 
     String name = c.getString(1); 
     return name; 
    } 
    return null; 
} 

친절하게 어떤 종류의 데이터가 열입니다

답변

0

시험해보기 :

Cursor c = sherlockdb.query(TABLE_NAME, columns, NAME_COLUMN +"='"+ s+"'", null, null, null, NAME_COLUMN); 

'john'형식의 문자열이 필요하므로

+1

감사합니다, 그것은했다! – user1642943

1

도와주세요 난 당신이 ''사이의 문자 jonh을 넣어 깜빡 생각

당신이 시도 할 수 있습니다.

SELECT name, gender, height, age, hair FROM details WHERE name='john' ORDER by name; 
3

은 교체 :와

Cursor c = sherlockdb.query(TABLE_NAME, columns, NAME_COLUMN +"="+ s, null, null, null, NAME_COLUMN); 

:

String[] args={s}; 
Cursor c = sherlockdb.query(TABLE_NAME, columns, NAME_COLUMN +"=?", args, null, null, NAME_COLUMN); 
+0

String [] args = {s}로 바꾸면 "columns"를 사용할 수없고 데이터를 읽는 데 필요합니다. – user1642943

+1

@ user1642943'columns'을 대체하지 않고 그대로 유지합니다. : http://pastebin.com/PFWS7Lnn – zapl

+0

@ user1642943 : 문제는's' (분명히'john')의 값이 칼럼의 이름이 아니라는 것입니다. 그 문자열을 문자열로 취급하려면 문자열을 인용해야합니다. 인용하는 가장 좋은 방법은 쿼리 매개 변수 (개정 된'query()'호출에서'? ')를 통해 SQLite가이를 수행하도록하는 것입니다. 그렇게하면 값 내에 포함 된 인용 부호를 이스케이프 처리합니다. – CommonsWare