마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

[sqlite] 배열에 값넣기 질문입니다. 도와주세요

0 추천

안녕하세요 db커서를 이용하여 배열에 집어 넣으려고 하는데 자꾸 에러가 생깁니다. 고수님들 도와 주세요..

 

소스코드는

public class GraphViewMain extends Activity{
	
    private GraphicalView mChartView;
	DBHelper mDBHelper;
	int[] kor, eng, mat, soc, sci;
        //생략

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.graphview);
		LinearLayout layout = (LinearLayout) findViewById(R.id.chart);

        //생략
        
    	mDBHelper = new DBHelper(this, "grade.db", null, 1);
		Log.d("act","open db");
		SQLiteDatabase db = mDBHelper.getWritableDatabase();
		Cursor cursor = db.rawQuery("SELECT * FROM grade ORDER BY _id desc limit 5", null);
		Log.d("act","rawQuery");
		
		cursor.moveToLast();
		
		int clength = cursor.getCount();
		Log.d("act","getCount");
		
		cursor.moveToFirst();
		Log.d("act","mvfirst");
		
		for(int i=0; i<clength; i++){
			kor[i] = cursor.getInt(3);
			eng[i] = cursor.getInt(4);
			mat[i] = cursor.getInt(5);
			soc[i] = cursor.getInt(6);
			sci[i] = cursor.getInt(7);
			cursor.moveToNext();
		}
		Log.d("act","input ok");
		cursor.close();
		mDBHelper.close();
		Log.d("act","DB close");

        
        List<int[]> values = new ArrayList<int[]>();
        values.add(kor);
        values.add(eng);
        values.add(mat);
        values.add(soc);
        values.add(sci);

        //생략
       }
}
        

입니다. 

 

LogCat에서는 이런 에러가 나는데 DB건드려서 개발하는게 처음이라 힘드네요..ㅠㅠ 도움 부탁드립니다ㅠ

 

 

너굴쭌 (150 포인트) 님이 2014년 2월 18일 질문

3개의 답변

+1 추천
 
채택된 답변
            kor[i] = cursor.getInt(3);
            eng[i] = cursor.getInt(4);
            mat[i] = cursor.getInt(5);
            soc[i] = cursor.getInt(6);
            sci[i] = cursor.getInt(7);

앞서 해당 행에서 배열의 크기를 얼마나 줘야할지 모르는데 접근하려고 하니 에러를 출력하는것 같습니다.

데이터베이스에서 얻어온 데이터의 크기만큼 배열을 초기화 하고 다시 시도해보세요.

배열 말고 ArrayList를 사용하여 추가하는 방식으로 하여도 되겠네요.

그리고 getInt의 인자로 숫자로 그대로 주었는데 만약 해당 위치에 데이터가 없으면 또 문제가 있을 수 있으니

원하는 컬럼의 위치를 커서에서 얻고 시도하는것이 좋을꺼 같습니다.

인연 (31,880 포인트) 님이 2014년 2월 19일 답변
너굴쭌님이 2014년 2월 20일 채택됨
배열크기가 문제 였네요 답변 감사합니다!!!ㅎㅎ

        int[] kor = new int[clength];
        int[] eng = new int[clength];
        int[] mat = new int[clength];
        int[] soc = new int[clength];
        int[] sci = new int[clength];

이런식으로 처리했습니다~ㅎ
0 추천

음.. 로그 찍히는 거 하나도 없이 실행하자마자 에러난거에요?

조금 더 상세한 설명 부탁드려요

 

한마디하자면,

기존에 생성된 DB에서 값을 가져오시는 거 같은데,

쓰기전용으로 하셨네요? 읽기전용으로 바꿔주세요

SQLiteDatabase db = mDBHelper.getWritableDatabase();

SQLiteDatabase db = mDBHelper.getReadableDatabase();

 

초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 19일 답변
아 이부분에서도 제가 잘못한게 있었네요..ㅠㅠ 무작정 소스 있는거 짜집기를 열심히 햇더니.. 감사합니다!
0 추천

clength 로 데이터 row 수를 구하셨으면

아래 배열도 길이만큼 생성하셨나요?

int[] kor, eng, mat, soc, sci;

코딩인헬 (12,150 포인트) 님이 2014년 2월 19일 답변
제가 AchartEngine을 사용하는데 배열 길이 문제 였네요 감사합니다!
...