일반적으로 안드로이드에서 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());
저렇게 무식하게 해야만 해결하는 걸까..
아직 서핑실력의 부족 & 영문독해실력 부족으로 여기까지밖에 해결책을 찾지 못했다 ㅠㅠ