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

sqlite db 데이터 조회

0 추천

https://goatlab.tistory.com/995

 

여기서

 

sqlite db에 리스너로 입력하는 거 말고 코드로 넣고 데이터 조회하는 방법을 모르겠습니다.!!

 

textView = findViewById(R.id.TextView);

dbHelper = new DatabaseHelper(this);
dbHelper.insertData(1, 1, 1, 1);

Cursor res = dbHelper.getAllData();

StringBuffer buffer = new StringBuffer();
while(res.moveToNext()){
    buffer.append("ID: "+res.getString(0)+"\n");
    buffer.append("NAME: "+res.getString(1)+"\n");
    buffer.append("AGE: "+res.getString(2)+"\n");
    buffer.append("PHONE: "+res.getString(3)+"\n\n");
    textView.setText(buffer);
}
enerigpy (2,110 포인트) 님이 2022년 11월 11일 질문
sqlite db에 리스너로 입력하는 거 말고 코드로 넣고 => 이게 무슨 의미인가요? 해당 블로그에는 코드를 통해 데이터를 처리하고 있는데요...
제 말은 사용자가 앱 화면을 통해 직접입력하는 거 말고 코드 내에서 값을 넣고 데이터를 추가하고 싶어서요!
이미 원하시는 코드가 리스너 안에 다 들어 있으므로 이걸 사용하시면 됩니다.
네 근데 질문글에 올린 코드로 실행하면 튕겨버려서 뭐가 문제인지 모르겠습니다!

1개의 답변

+1 추천
 
채택된 답변

에러가 난다면, 왜 에러가 나는지 로그가 있습니다. 로그캐에서 확인하셔서 에러메세지에 따라 코드를 수정하셔야 겠죠.

님이 데이터를 처리하기 원하는 클래스에서 액티비티에서 하듯이 같은 식으로 DatabaseHelper 객체를 하나 만드시고 필요에 맞게  DatabaseHelper의 getAllData, insertData, updateData, deleteData를 호출하시면 됩니다.

자바의 클래스를 이용할 수 있다면  해결하실 수 있는 문제로 보이는데요.

DatabaseHelper 클래스 내부를 들여다 보면 실제는 User정보를  처리하는 DAO로 보입니다.  따라서 DatabaseHelper보다는 UserDao정도가 적절한 이름으로 보입니다. 그리고 메소드들을 보면 원시타입을 사용하고 있는데, getAllData는 List<User>를 리턴하고 insertData(User user), updateData(User user) 와 같이 처리하는 것이 뷰에게 Dao가 어떻게 내부적으로 동작하는지에 대한 내용을 알게 할 필요가 없기 때문에  좀 더  나아보입니다. 그리고 deleteData는 deleteById(String id) 정도로 하는게 메소드 이름을 보고 다르게 이해하는 오해를 줄일 수 있을 것 같아 보입니다.

public class User {
    private final String id;
    private final String name;
    private final  int age;
    private final String phone;

   // Constructor, Getters 필요
}

// DatbaseHelper -> UserDao
public List<User> getAllData(){
        List<User> result = new ArrayList<>();

        SQLiteDatabase db =  this.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from "+TABLE_NAME,null);
        StringBuffer buffer = new StringBuffer();
                while(cursor.moveToNext()){
                    String id = es.getString(0);
                    String name = res.getString(1);
                    int age = res.getInt(2);
                    String phone = res.getString(3);

                    User user = new User(id, name, age, phone);
                    result.add(user);
                }
        return  result;
    }

추가로 dabase 처리는 I/O에 해당하므로 백그라운드 쓰레드 처리한다면 더 좋을 것 같습니다.

spark (226,420 포인트) 님이 2022년 11월 12일 답변
enerigpy님이 2022년 11월 12일 채택됨
...