반응형
헬퍼 클래스
@SQLiteOpenHelper 클래스
유지 보수가 더 좋기 때문에 SQLiteDatabase 보다 자주 사용이 된다.
인스턴스를 생성해주어야 사용이 가능하다 .
@public SQLiteOpenHelper (Context context , String name , SQLiteDatabase.CursorFactory factory, int version)
인스턴스 생성시 전달해야하는 값인데 (1 컨택스트 , 2 db이름 , 3 커서 팩토리 (그냥 null로 씀) , 4,임의로 만들어준 버전
@ 인스턴스 생성을 하면 자동으로 콜백이 되는 메소드들 ( 보통 데이터베이스는 생성자로 생성됨)
onCreat -> 생성 될때 딱 한번만 호출 되고 호출후 onOpen호출함
onOpen -> 다시 실행했을때 실행됨
onUpgrade -> 버전이 변경되면 실행되는 메소드 호출후 onOpen호출함
사실 처음 안드로이드에서 사용했던것에서 헬퍼만 추가된것이라 실습한 코드를 보면서 이해하자
public class MainActivity extends AppCompatActivity {
EditText edt_name, edt_num, edt_name_txt, edt_num_txt;
boolean isDB_Creat = false;
int version = 1;
SQLiteOpenHelper helper; // SQLiteOpenHelper 만들어주기
SQLiteDatabase db; // SQLiteDatabase 만들어주기
String db_name = "sing";
String tb_name = "boy_group";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt_name = findViewById(R.id.edt_name);
edt_name_txt = findViewById(R.id.edt_name_txt);
edt_num = findViewById(R.id.edt_num);
edt_num_txt = findViewById(R.id.edt_num_txt);
Button btn_recycle = findViewById(R.id.btn_recycle);
Button btn_add = findViewById(R.id.btn_add);
Button btn_change = findViewById(R.id.btn_change);
Button btn_del = findViewById(R.id.btn_del);
Button btn_search = findViewById(R.id.btn_search);
edt_name_txt.setText("그룹이름");
edt_num_txt.setText("인원수");
createhelper(); //헬퍼 생성 메소드 호출
//초기
btn_recycle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//테이블 없애주기
db.execSQL("DROP TABLE "+tb_name);
//테이블 생성
db.execSQL("CREATE TABLE IF NOT EXISTS "+ tb_name +"(name char(10), num INTEGER )");
Toast.makeText(getApplicationContext(),"기존 테이블 삭제하고 초기화 하였습니다." , Toast.LENGTH_LONG).show();
edt_name_txt.setText("그룹이름");
edt_num_txt.setText("인원수");
}
});
//입력
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//입력하기위한 sql문 작성
db.execSQL("INSERT INTO " + tb_name + "(name , num) VAlUES ('"+ edt_getname() + "',"+edt_getnum()+")");
Toast.makeText(getApplicationContext(),"데이터 입력하였습니다." , Toast.LENGTH_LONG).show();
btn_search.callOnClick(); // 해당 버튼 호출 메서드 해당 버튼 누른거랑 동일한 효과
}
});
//수정
btn_change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//수정을 위한 sql문
db.execSQL("UPDATE "+tb_name+" SET num = "+edt_getnum()+" WHERE name = '"+edt_getname()+"'" );
Toast.makeText(getApplicationContext(),"데이터 수정하였습니다." , Toast.LENGTH_LONG).show();
btn_search.callOnClick();
}
});
//삭제
btn_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 삭제를 위한 sql문
db.execSQL("DELETE FROM "+tb_name+" WHERE name ='"+edt_getname()+"'");
Toast.makeText(getApplicationContext(),"데이터 삭제하였습니다." , Toast.LENGTH_LONG).show();
btn_search.callOnClick();
}
});
//조회
btn_search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt_name_txt.setText("그룹이름");
edt_num_txt.setText("인원수");
//쿼리문 만들어 담아주고
String query = "SELECT * FROM "+tb_name ;
//출력을 위한 커서
Cursor cursor = db.rawQuery(query,null);
//여기서 cursor == null 이렇게 작성해도 데이터가 없으면 null로 잡힌다.
//커서의 크기 가져오기
int count = cursor.getCount();
for (int i = 0 ; i < count ;i++) {
cursor.moveToNext(); //커서 이동
String name = cursor.getString(0);
int num = cursor.getInt(1);
printname(name);
printnum(num);
}
}
});
}
//에디트 텍스트에서 받아오는 메소드
public String edt_getname(){
String name = edt_name.getText().toString();
return name;
}
public int edt_getnum(){
int gorupnum = Integer.parseInt(edt_num.getText().toString());
return gorupnum;
}
//데이터베이스 생성 메소드
public boolean createhelper () {
helper = new DatabaseHelper(this); //헬퍼 인스턴스화
db= helper.getWritableDatabase(); //작성을 위한 데이터 베이스 설정
return true;
}
//이름 출력 메소드
public void printname(String msg) {
edt_name_txt.append("\n" + msg);
}
//번호 출력 메소드
public void printnum(int msg) {
edt_num_txt.append("\n" + msg);
}
//헬퍼 클래스
class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(@Nullable Context context) {
//여기서 데이터베이스 생성한다
super(context, db_name , null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//테이블 생성
db.execSQL("CREATE TABLE IF NOT EXISTS "+ tb_name +"(name char(10),num INTEGER )");
}
@Override //버전이 달라지면 자동호출 메소드
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
파일 입출력에서 해봤었던 일기장 어플리케이션 데이터 베이스로 만들어보기
public class MainActivity extends AppCompatActivity {
EditText editText;
DatePicker datePicker;
SQLiteOpenHelper dbhelfer; //헬퍼 달아주기
SQLiteDatabase db; // 데이터 베이스 만들어주기
String db_name = "diarydb";
String tb_name = "diarytb";
int version = 1;
String con;
boolean is_have = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
Button button = findViewById(R.id.button);
datePicker = findViewById(R.id.datePicker);
dbhelfer = new DatabaseHelper(this);
db = dbhelfer.getWritableDatabase();
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
try{ // 트라이 캐치문으로 해본것
con = Integer.toString(year)+Integer.toString(month+1)+Integer.toString(day);
String query = "SELECT content From "+tb_name+" where diaryDate = '"+con+"'";
Cursor cursor = db.rawQuery(query,null);
cursor.moveToNext();
String a = cursor.getString(0);
editText.setText(a);
Toast.makeText(getApplicationContext(),year+"년"+(month+1)+"월"+day+"일 일기를 불러왔습니다.",Toast.LENGTH_LONG).show();
button.setText("수정하기");
is_have = true;
}catch (CursorIndexOutOfBoundsException c){
editText.setText("데이터 없음");
is_have = false;
}
// 다시 확인해봐야함 if 문으로 제어가 안된다....
// con = Integer.toString(year) + Integer.toString(month + 1) + Integer.toString(day);
// String query = "SELECT content From " + tb_name + " where diaryDate = '" + con + "'";
// Cursor cursor = db.rawQuery(query, null);
// cursor.moveToNext();
// if (cursor == null) {
// editText.setText("데이터 없음");
// is_have = false;
// } else if (cursor != null){
// String a = cursor.getString(0);
// editText.setText(a);
// Toast.makeText(getApplicationContext(), year + "년" + (month + 1) + "월" + day + "일 일기를 불러왔습니다.", Toast.LENGTH_LONG).show();
// button.setText("수정하기");
// is_have = true;
// }
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
try {
con = Integer.toString(year) + Integer.toString(monthOfYear + 1) + Integer.toString(dayOfMonth);
String query = "SELECT content From " + tb_name + " where diaryDate = '" + con + "'";
Cursor cursor = db.rawQuery(query, null);
cursor.moveToNext();
String a = cursor.getString(0);
editText.setText(a);
button.setText("수정하기");
is_have = true;
} catch (CursorIndexOutOfBoundsException c) {
editText.setText("데이터 없음");
button.setText("저장하기");
is_have = false;
}
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (is_have) {
String a = editText.getText().toString();
db.execSQL("UPDATE " + tb_name + " SET content = '" + a + "' WHERE diaryDate = '" + con + "'");
String query = "SELECT content From " + tb_name + " where diaryDate = '" + con + "'";
Cursor cursor = db.rawQuery(query, null);
cursor.moveToNext();
String b = cursor.getString(0);
editText.setText(b);
Toast.makeText(getApplicationContext(), con + "에 일기를 수정했습니다. ", Toast.LENGTH_LONG).show();
} else {
String content_Diary = editText.getText().toString();
db.execSQL("INSERT INTO " + tb_name + "(diaryDate, content) VALUES ('" + con + "','" + content_Diary + "')");
Toast.makeText(getApplicationContext(), con + "에 일기를 저장했습니다. ", Toast.LENGTH_LONG).show();
button.setText("수정하기");
}
}
});
}
class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(@Nullable Context context) {
super(context, db_name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + tb_name + "(diaryDate char(10),content VARCHAR(50) )");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
반응형
'아옳옳의 코딩공부 > 아옳옳의 안드로이드스튜디오' 카테고리의 다른 글
2021-06-10안드로이드 스튜디오 (멀티미디어 이용하기) (0) | 2021.06.10 |
---|---|
2021-06-06안드로이드 스튜디오 (파이어베이스 연동) (0) | 2021.06.07 |
2021-06-03안드로이드 스튜디오 (SQLite 사용하기) (0) | 2021.06.03 |
2021-05-12안드로이드 스튜디오(파일 입출력2 sd) (0) | 2021.05.13 |
2021-05-12안드로이드 스튜디오(파일 입출력) (0) | 2021.05.12 |