출처 : http://here4you.tistory.com/49
안드로이드 개인 앱개발을 진행하면서, 파싱한 데이터를 SQLite에 저장할 필요가 생기게 되었는데
해당 내용을 참조하여 데이터가 잘 들어간 것을 확인하였다.
생각보다 쉽네~~
public class SQLiteHelper extends SQLiteOpenHelper {
public static SQLiteHelper sqLiteHelper = null;
public static final String DATABASE_NAME = "NumberData.db";
public static final String TABLE_NAME = "Lotto_table";
public static final int DB_VERSION = 1;
public static final String IDX = "IDX";
public static final String COL_0 = "DRWNO";
public static final String COL_1 = "DRWTNO1";
public static final String COL_2 = "DRWTNO2";
public static final String COL_3 = "DRWTNO3";
public static final String COL_4 = "DRWTNO4";
public static final String COL_5 = "DRWTNO5";
public static final String COL_6 = "DRWTNO6";
public static final String COL_7 = "BNUSNO";
public static final String COL_8 = "FIRSTPRZWNERCO";
public static final String COL_9 = "FIRSTWINAMNT";
public static final String COL_10 = "TOTSELLAMNT";
public static final String COL_11 = "DRWNODATE";
private SQLiteDatabase db;
public static SQLiteHelper getInstance(Context context){ // 싱글턴 패턴으로 구현하였다.
if(sqLiteHelper == null){
sqLiteHelper = new SQLiteHelper(context);
}
return sqLiteHelper;
}
private SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DB_VERSION);
db = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " ("
+ IDX + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COL_0 + " INTEGER, "
+ COL_1 + " INTEGER, "
+ COL_2 + " INTEGER, "
+ COL_3 + " INTEGER, "
+ COL_4 + " INTEGER, "
+ COL_5 + " INTEGER, "
+ COL_6 + " INTEGER, "
+ COL_7 + " INTEGER, "
+ COL_8 + " INTEGER, "
+ COL_9 + " INTEGER, "
+ COL_10 + " INTEGER, "
+ COL_11 + " TEXT"
+ ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
// 데이터 주입
public boolean insertData(NumberData numberData){ // Insert 하는 부분
// SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_0, numberData.getDrwNo());
contentValues.put(COL_1, numberData.getDrwtNo1());
contentValues.put(COL_2, numberData.getDrwtNo2());
contentValues.put(COL_3, numberData.getDrwtNo3());
contentValues.put(COL_4, numberData.getDrwtNo4());
contentValues.put(COL_5, numberData.getDrwtNo5());
contentValues.put(COL_6, numberData.getDrwtNo6());
contentValues.put(COL_7, numberData.getBnusNo());
contentValues.put(COL_8, numberData.getFirstPrzwnerCo());
contentValues.put(COL_9, numberData.getFirstWinamnt());
contentValues.put(COL_10, numberData.getTotSellamnt());
contentValues.put(COL_11, numberData.getDrwNoDate());
long result = db.insert(TABLE_NAME, null, contentValues);
if(result == -1)
return false;
else
return true;
}
// 데이터의 존재 유무 확인
public boolean isSelectData(int drwno){
boolean isData = false;
String sql = "select * from "+TABLE_NAME+" where "+COL_0+" = "+drwno+";";
Cursor result = db.rawQuery(sql, null);
// result(Cursor)객체가 비어있으면 false 리턴
if(result.moveToFirst()){
isData = true;
}
result.close();
return isData;
}
// 원하는 회차 조회
public NumberData selectData(int drwno){
NumberData lottoData = null;
String sql = "select * from "+TABLE_NAME+" where "+COL_0+" = "+drwno+";";
Cursor result = db.rawQuery(sql, null);
// result(Cursor)객체가 비어있으면 false 리턴
if(result.moveToFirst()){
lottoData = new NumberData();
lottoData.setDrwNo(result.getInt(1));
lottoData.setDrwtNo1(result.getInt(2));
lottoData.setDrwtNo2(result.getInt(3));
lottoData.setDrwtNo3(result.getInt(4));
lottoData.setDrwtNo4(result.getInt(5));
lottoData.setDrwtNo5(result.getInt(6));
lottoData.setDrwtNo6(result.getInt(7));
lottoData.setBnusNo(result.getInt(8));
lottoData.setFirstPrzwnerCo(result.getInt(9));
lottoData.setFirstWinamnt(result.getLong(10));
lottoData.setTotSellamnt(result.getLong(11));
lottoData.setDrwNoDate(result.getString(12));
result.close();
return lottoData;
}
result.close();
return lottoData;
}
// 전체 데이터 조회
public List<NumberData> selectAll(){
List<NumberData> dataResultList = new ArrayList<NumberData>();
String sql = "select * from "+TABLE_NAME+" ORDER BY "+COL_0+" DESC;";
Cursor results = db.rawQuery(sql, null);
if(results.moveToFirst()){
do{
NumberData lottoData = new NumberData();
lottoData.setDrwNo(results.getInt(1));
lottoData.setDrwtNo1(results.getInt(2));
lottoData.setDrwtNo2(results.getInt(3));
lottoData.setDrwtNo3(results.getInt(4));
lottoData.setDrwtNo4(results.getInt(5));
lottoData.setDrwtNo5(results.getInt(6));
lottoData.setDrwtNo6(results.getInt(7));
lottoData.setBnusNo(results.getInt(8));
lottoData.setFirstPrzwnerCo(results.getInt(9));
lottoData.setFirstWinamnt(results.getLong(10));
lottoData.setTotSellamnt(results.getLong(11));
lottoData.setDrwNoDate(results.getString(12));
dataResultList.add(lottoData);
}while(results.moveToNext());
}
return dataResultList;
}
// 가장 최신 회차 번호 가져오기.
public int getMaxDrwNo(){
String []columns = new String[]{COL_0};
int maxDrwNo = 0;
Cursor result = db.query(TABLE_NAME, columns, null, null, null, null, COL_0 + " DESC", "1");
if(result.moveToFirst()){
maxDrwNo = result.getInt(0);
result.close();
return maxDrwNo;
}
result.close();
return maxDrwNo;
}
// DELETE
public int deleteRecord(){
int deleteRecordCnt = db.delete(TABLE_NAME, null, null);
return deleteRecordCnt;
}
}
해당 메서드를 구성하고 다른 액티비티에서 Insert, delete, select가 가능하다 Update의 경우는 구현하고자 하는 내용에 필요가 없어서
제외하였다.
아래는 참고한 사이트의 내용이다
아래의 내용은 싱글톤 패턴으로 구현되어 있지 않다.
그리고 close도 주기적으로 해주는 모습을 보인다.
하지만 싱글톤 패턴으로 구현 되어있다면, SQLite객체를 단 한번만 생성하고 단 한번만 열어서 사용하기 때문에 굳이 DB를 닫지 않더라도,
메모리 누수가 발생하지 않는다. 만일 DB를 사용할때마다 DB를 열도록 구현했다면 메모리 누수가 발생하지 않도록 사용후 닫아 줘야 한다.
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | package com.example.databasetest; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { // 상수 관련 String dbName = "apList.db" ; // name of Database; String tableName = "apListTable" ; // name of Table; int dbMode = Context.MODE_PRIVATE; // Database 관련 객체들 SQLiteDatabase db; // GUI 관련 public Button btCreateDB, btCreateTable, btRemoveTable, btInsertData, btRemoveData; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btCreateDB = (Button) findViewById(R.id.btCreatDB); btCreateTable = (Button) findViewById(R.id.btCreateTable); btRemoveTable = (Button) findViewById(R.id.btRemoveTable); btInsertData = (Button) findViewById(R.id.btInsertData); btRemoveData = (Button) findViewById(R.id.btRemoveData); db = openOrCreateDatabase(dbName,dbMode, null ); } public void onClick(View v) { int id = v.getId(); if (id == btCreateDB.getId()) { //createDatabase(dbName,dbMode); } else if (id == btCreateTable.getId()) { createTable(); } else if (id == btRemoveTable.getId()) { removeTable(); } else if (id == btInsertData.getId()) { insertData( "hahahehe" ); } else if (id == btRemoveData.getId()) { selectAll(); } } // Database 생성 및 열기 public void createDatabase(String dbName, int dbMode){ db = openOrCreateDatabase(dbName,dbMode, null ); } // Table 생성 public void createTable(){ String sql = "create table " + tableName + "(id integer primary key autoincrement, " + "voca text not null)" ; db.execSQL(sql); } // Table 삭제 public void removeTable(){ String sql = "drop table " + tableName; db.execSQL(sql); } // Data 추가 public void insertData(String voca){ String sql = "insert into " + tableName + " values(NULL, '" + voca + "');" ; db.execSQL(sql); } // Data 업데이트 public void updateData( int index, String voca){ String sql = "update " + tableName + " set voca = '" + voca + "' where id = " +index + ";" ; db.execSQL(sql); } // Data 삭제 public void removeData( int index){ String sql = "delete from " + tableName + " where id = " +index+ ";" ; db.execSQL(sql); } // Data 읽기(꺼내오기) public void selectData( int index){ String sql = "select * from " +tableName+ " where id = " +index+ ";" ; Cursor result = db.rawQuery(sql, null ); // result(Cursor 객체)가 비어 있으면 false 리턴 if (result.moveToFirst()){ int id = result.getInt( 0 ); String voca = result.getString( 1 ); Toast.makeText( this , "index= " +id+ " voca=" +voca, 0 ).show(); } result.close(); } // 모든 Data 읽기 public void selectAll(){ String sql = "select * from " + tableName + ";" ; Cursor results = db.rawQuery(sql, null ); results.moveToFirst(); while (!results.isAfterLast()){ int id = results.getInt( 0 ); String voca = results.getString( 1 ); Toast.makeText( this , "index= " +id+ " voca=" +voca, 0 ).show(); results.moveToNext(); } results.close(); } } |
'개발 공부 기록하기 > - Android' 카테고리의 다른 글
[안드로이드] SQLite 내용을 눈으로 확인하기 (1) | 2016.04.14 |
---|---|
[안드로이드] Fragment BackStack에 대한 고찰. (0) | 2016.03.10 |
[안드로이드]액티비티 전체를 덮는 네비게이션 드로어 만들기 (0) | 2016.03.02 |
[안드로이드]RelativeLayout의 주요 레이아웃 속성 (0) | 2016.03.02 |
안드로이드 Time Sync 맞추는 방법 (0) | 2015.12.22 |