페이지

2010년 10월 26일 화요일

안드로이드 SQLite3 query를 통한 Cusor 사용시 이상한 문제

일반적으로 안드로이드에서 SQLite3 DB를 이용하여 여러 Row의 데이터를 읽을때
아래처럼 코딩을 주로 한다.
    int rowCnt = 0;
  String strWhere = " keyIdx= ?";
  String args[] = {"keyValue"};
  String getColumns[] = {"a", "b", "c"};

  Cursor cus = sdb.query(MY_TABLE_NAME, getColumns, strWhere, args, null, null, "cal_day, cal_degree desc");

  try{
   rowCnt = cus.getCount();
   if(rowCnt > 0){
    int i = 0;
 
    cus.moveToFirst();
    data = null;
    data = new testData[cus.getCount()];
 
    int a = cus.getColumnIndex("a");
    int b = cus.getColumnIndex("b");
    int c = cus.getColumnIndex("c");
    do{
     try{
      data[i] = new testData();
   
      data[i].setA(cus.getString(a));
      data[i].setB(cus.getInt(b));
      data[i].setC(cus.getInt(c));
   
     }catch(Exception e){
      e.printStackTrace();
     }
     i++;
    }while(cus.moveToNext());


그러나 불행히도 이렇게 하니 자꾸만 아래와 같은 에러가 난다.
ERROR/CursorWindow(275): Bad request for field slot 0,-1. numRows = 2, numColumns = 3
물론 위의 에러 중 numRows는 데이터 Row가 2개라는 거니 맞고 numcolumns 또한 세개를 가져오라는 거니 맞다 단  Bad request for field slot 0,-1. <-- 요게 문제다..
아무리 해도 데이터를 제대로 가져오지 못해서 결국 아래와 같이 바꿨더니 해결되었다.
아래의 빨간색 글을 확인해보자

  int rowCnt = 0;
  String strWhere = " keyIdx= ?";
  String args[] = {"keyValue"};
  String getColumns[] = {"a", "b", "c"};


  Cursor cus = sdb.query(MY_TABLE_NAME, getColumns, strWhere, args, null, null, "cal_day, cal_degree desc");


  try{
   rowCnt = cus.getCount();
   if(rowCnt > 0){
    int i = 0;
   
    cus.moveToFirst();
    data = null;
    data = new testData[cus.getCount()];
   
    int idx = 0;//cus.getColumnIndex("a");
    int yea = 1;//cus.getColumnIndex("b");
    int mon = 2;//cus.getColumnIndex("c");
 


   do{
     try{
      data[i] = new testData();
     
      data[i].setA(cus.getString(a));
      data[i].setB(cus.getInt(b));
      data[i].setC(cus.getInt(c));
     
     }catch(Exception e){
      e.printStackTrace();
     }
     i++;
    }while(cus.moveToNext());

저렇게 무식하게 해야만 해결하는 걸까..
아직 서핑실력의 부족 & 영문독해실력 부족으로 여기까지밖에 해결책을 찾지 못했다 ㅠㅠ

댓글 없음:

댓글 쓰기