지난 글에 이어서 데이터 조회하는 코드를 작성할 것이다. 프로젝트 파일을 이어서 사용한다.
11장 - 헬퍼 클래스 : 스키마 업그레이드
헬퍼(Helper) 클래스 : 스키마를 업그레이드 할 때 사용하기 좋은 클래스.스키마 : 테이블의 구조를 정의한 것 이미 테이블 안에 데이터가 존재한다면, 스키마를 수정할 때 데이터의 손실이 일어
sand-to-desert.tistory.com
0️⃣핵심🔥
데이터베이스 사용순서
- 데이터베이스 만들기 : openOrCreateDatabase() → SQLiteDatabase 객체가 반환됨.
- 테이블 만들기 : execSQL() → 'CREATE TABLE ...'
- 레코드 추가하기 : execSQL() → 'INSERT INTO ...'
- 데이터 조회하기 : rawQuery() → 'SELECT FROM ...' → Cursor 객체가 반환됨.
1️⃣activity_main.xml
살짝 수정.
2️⃣DatabaseHelper 수정 (살짝만 수정함)
더보기
package com.example.chapter11_3;
public class DatabaseHelper extends SQLiteOpenHelper {
//public static String name = "employee.db";
public static String tbName = "emp";
public static int version = 1;
public DatabaseHelper(@Nullable Context context, String name) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table if not exists " + tbName + "(" + " _id integer PRIMARY KEY autoincrement, "
+ " name text, " + " age integer, " + " mobile text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(newVersion>1){
db.execSQL("DROP TABLE IF EXISTS "+tbName);
}
}
}
3️⃣MainActivity.java
package com.example.chapter11_3;
public class MainActivity extends AppCompatActivity {
EditText editText_DB, editText_TB;
TextView textView;
SQLiteDatabase database;
DatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText_DB = findViewById(R.id.editTextText);
//editText_TB = findViewById(R.id.editTextText2);
textView = findViewById(R.id.textView);
Button button_DB = findViewById(R.id.button);
button_DB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { // 데이터베이스 생성
textView.append("데이터베이스 & 테이블 생성 시작\n");
String dbName = editText_DB.getText().toString();
dbHelper = new DatabaseHelper(getApplicationContext(), dbName);
database = dbHelper.getWritableDatabase();
textView.append("데이터베이스 & 테이블 생성 완료" + dbName + "\n");
// 레코드 추가
textView.append("레코드 추가 시작\n");
database.execSQL("insert into " + "emp" + "(name, age, mobile)"+
"values" + "('Sheldon', 26, '010-3141-5926')");
database.execSQL("insert into " + "emp" + "(name, age, mobile)"+
"values" + "('Penny', 26, '010-3141-5926')");
database.execSQL("insert into " + "emp" + "(name, age, mobile)"+
"values" + "('Leonard', 26, '010-3141-5926')");
textView.append("레코드 추가 완료\n");
}
});
Button button_CK = findViewById(R.id.button3);
button_CK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.append("데이터 호출 시작\n");
Cursor cursor = database.rawQuery("select _id, name, age, mobile from emp", null);
// executeSQL : 결과값이 없는 SQL 실행 방법
// rawQuery : 결과값을 Cursor 객체로 받을 수 있는 SQL 실행 방법
int recordCount = cursor.getCount();
textView.append("레코드 개수 : "+recordCount+"\n");
for(int i=0;i<recordCount;i++){
cursor.moveToNext(); // while문을 사용할 경우 moveToNext가 false를 반환할 때까지 반복하는 형식으로 사용.
int id = cursor.getInt(0);
String name = cursor.getString(1);
int age = cursor.getInt(2);
String mobile = cursor.getString(3);
textView.append("레코드 #"+i+" : "+id+", "+name+", "+age+", "+mobile+"\n");
}
cursor.close();
}
});
}
}
cursor 객체에 사용할 수 있는 메서드
int getColumnCount () int getColumnIndex (String columnName) |
String[] getColumnNames () | String getColumnName (int columnIndex) |
int getCount () | boolean moveToNext () boolean moveToPrevious () boolean moveToFirst () boolean moveToLast () boolean move (int offset) |
String getString (int columnIndex) short getShort (int columnIndex) int getInt (int columnIndex) long getLong (int columnIndex) float getFloat (int columnIndex) double getDouble (int columnIndex) byte[] getBlob (int columnIndex) |
4️⃣에러
레코드의 개수가 처음에 3개가 나와야하는데, 4개가 나오는거다. 이상해서 앱을 다시 실행했더니 7개가 되었다.
'데이터베이스랑 테이블 만들기' 버튼을 누를 때마다, 레코드가 생성되는 것이었다.
게다가 처음엔 레코드 추가에서 전화번호 값을 '010-3141-5926'으로 안 넣고 010-3141-5926으로 넣었더니, 정수형으로 들어가버림. 그래서 10 - 3141 - 5926 = -9057 이라는 값이 들어감. (처음엔 -9057이 무슨 에러코드지? 했는데 걍.. 내 실수.)
앱을 아예 제거한 뒤 다시 시작했더니 제대로 동작함.
5️⃣실행 결과
'TIL > 안드로이드 스튜디오' 카테고리의 다른 글
11장 - 앨범과 연락처 조회하기 (0) | 2025.02.13 |
---|---|
11장 - 내용 제공자 이해하기☠ (0) | 2025.02.12 |
11장 - 헬퍼 클래스 : 스키마 업그레이드 (0) | 2025.02.09 |
11장 - 단말에 데이터베이스와 테이블 만들기 (0) | 2025.02.08 |
도전!20 - RSS 조회 내용을 그리드뷰로 보여주기 (0) | 2025.02.08 |