본문 바로가기
[ Developer ]/Android

[Android] 안드로이드 SQLite 데이터 조회

by 김현섭. 2016. 7. 27.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Android Database 데이터 조회

이전에 했던 Android Database 생성과 입력을 이어서 데이터를 조회 하는 기능을 배워본다


DB 버튼 옆에 하나의 버튼을 또 생성해서 아래에 DB의 데이터들을 가져와서 출력을 해줄 것이다


우선 버튼을 하나 생성한다 그리고 그 밑에 ListView를 하나 생성한다


그리고 이제 메인에서 버튼과 ListView를 생성해준다


그리고 나서 btnSelectAllDatas를 클릭 했을 시 ListView를 보여주는 로직을 먼저 작성한다


각각 다른 버튼을 클릭 시 lvPersons 즉 리스트 뷰를 보이지 않게 INVISIBLE 처리를 해준다
그리고 나서 이제 DBHelper에서 DAO를 하나 생성한다


* getAllPersons Method
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public List<Person> getAllPersons() {
        StringBuffer sb = new StringBuffer();
        sb.append(" SELECT _ID, NAME, AGE, PHONE FROM TEST_TABLE ");
 
        // 일기 전용 DB 객체
        SQLiteDatabase db = getReadableDatabase();
 
        // SELECT 실행
        Cursor cursor = db.rawQuery(sb.toString(), null);
 
        List<Person> persons = new ArrayList<Person>();
 
        Person person = null;
 
        while ( cursor.moveToNext() ) {
            person = new Person();
            person.set_id(cursor.getInt(0));
            person.setName(cursor.getString(1));
 
            persons.add(person);
        }
 
        return persons;
    }
cs

id와 Name만 보여준 후 Detail에서 다른 정보들을 보여주기로 한다
이제는 다시 Main에 와서 나머지 로직을 작성해주면 된다
우선 dbHelper가 없다면 즉 DB가 생성되지 않았다면 생성을 먼저 해주게 걸러 준 후 List<Person>을 받아온다


이제 ListView에 뿌려주기 위해서는 Adapter와 Holder를 작성한다

* Adapter와 Holder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    private class PersonListAdapter extends BaseAdapter {
 
        private List<Person> persons;
        private Context context;
 
        public PersonListAdapter(List<Person> persons, Context context) {
            this.persons = persons;
            this.context = context;
        }
        @Override
        public int getCount() {
            return this.persons.size();
        }
        @Override
        public Object getItem(int position) {
            return this.persons.get(position);
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
 
            Holder holder = null;
 
            if ( convertView == null ) {
                convertView = new LinearLayout(context);
                ((LinearLayout) convertView).setOrientation(LinearLayout.HORIZONTAL);
 
                TextView tvId = new TextView(context);
                TextView tvName = new TextView(context);
 
                ((LinearLayout) convertView).addView(tvId);
                ((LinearLayout) convertView).addView(tvName);
 
                holder = new Holder();
                holder.tvId = tvId;
                holder.tvName = tvName;
 
                convertView.setTag(holder);
            }
            else {
                holder = (Holder) convertView.getTag();
            }
            
            Person person = (Person) getItem(position);
            holder.tvId.setText(person.get_id() + "");
            holder.tvName.setText(person.getName());
 
            return convertView;
        }
    }
 
    private class Holder {
        public TextView tvId;
        public TextView tvName;
 
    }
cs

위와 같이 ListView를 뿌려주기 위한 Adapter와 Holder를 작성한 후 이제 ListView를 뿌려주는 Adapter를 set 시켜주면 된다


* btnSelectAllDatas OnClick
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        btnSelectAllDatas = (Button) findViewById(R.id.btnSelectAllDatas);
        btnSelectAllDatas.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // ListView를 보여준다
                lvPersons.setVisibility(View.VISIBLE);
 
                // Person 데이터를 모두 가져온다
                if ( dbHelper == null ) {
                    dbHelper = new DBHelper(MainActivity.this"TEST"null1);
                }
 
                List<com.ktds.hskim.mydatabase.vo.Person> persons =  dbHelper.getAllPersons();
 
                // ListView에 Person 데이터를 보여준다
                lvPersons.setAdapter(new PersonListAdapter(persons, MainActivity.this));
            }
        });
cs

이제 결과를 확인해본다


DATA 가져오기를 누르면 데이터가 뜨는 것을 볼 수 있다
다른 버튼인 DB 생성을 누르면 데이터가 사라지는 것을 볼 수 있다