안드로이드 스튜디오 sqlite db 불러오기 - andeuloideu seutyudio sqlite db bulleoogi

안드로이드 앱을 만들때, sqlite는 기본적으로 사용되는 db이다

아래 코드는 앱에서 db에 데이터를 넣고, 삭제하고, 업데이트하는 내용이 아니다.

sqlite 테이블을 만든뒤, 해당 내용을 앱으로 불러오는 앱이다.

DB Browser는 csv형식도 잘 바꿔줄수있기때문에, 기존에 액셀등에 저장된 데이터를

잘 정리한다면 앱으로 원활하게 볼 수 있다.

주의사항은 한번 만들어진 db파일을 assets 폴더에 넣을경우, 해당내용을 아래 프로그램으로

수동으로 수정한다고해서 앱이 반영하지 않는다는점이다. 다시 build해도 db파일이 바뀌지않는다.

업데이트 내용을 반영할수 있을진 모르겠지만, 관련 내용은 찾지못했으며 db이름 자체를 바꿔서 넣으면

아래 코드에서는 바뀐내용으로 돌아가게된다. 즉 테이블 내용을 수동으로 바꿀거면, db파일이름 자체를 바꿔서 넣어야한다.

sqlite에 대한 내용은 소스출처 #ashcode의 내용을 수정했다.

DB 파일을 다루기위해, 아래링크에서 아래 프로그램을 다운받는다.

//sqlitebrowser.org/dl/

안드로이드 스튜디오에서 assets 폴더생성하고, sqlite_file.db 파일을 생성한뒤 집어넣는다.

db는 미리 만들어서 넣어놓는다

DataBaseHelper.class를 만든다.

db의 이름과 경로를 통해 assets에 있는 db를 사용할것인지 등을 확인

public class DataBaseHelper extends SQLiteOpenHelper { private static String TAG = "DataBaseHelper"; //Logcat에 출력할 태그이름 //디바이스 장치에서 데이터베이스의 경로 // TODO : assets 폴더에 있는 경우 "", 그 외 경로기입 private static String DB_PATH = ""; // TODO : assets 폴더에 있는 DB명 또는 별도의 데이터베이스 파일이름 private static String DB_NAME ="sqlite_file.db"; private SQLiteDatabase mDataBase; private final Context mContext; public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1);// 1은 데이터베이스 버젼 if(android.os.Build.VERSION.SDK_INT >= 17){ DB_PATH = context.getApplicationInfo().dataDir + "/databases/"; } else { DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; } this.mContext = context; } public void createDataBase() throws IOException { //데이터베이스가 없으면 asset폴더에서 복사해온다. boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { this.getReadableDatabase(); this.close(); try { //Copy the database from assests copyDataBase(); Log.e(TAG, "createDatabase database created"); } catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } } } ///data/data/your package/databases/Da Name <-이 경로에서 데이터베이스가 존재하는지 확인한다 private boolean checkDataBase() { File dbFile = new File(DB_PATH + DB_NAME); //Log.v("dbFile", dbFile + " "+ dbFile.exists()); return dbFile.exists(); } //assets폴더에서 데이터베이스를 복사한다. private void copyDataBase() throws IOException { InputStream mInput = mContext.getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream mOutput = new FileOutputStream(outFileName); byte[] mBuffer = new byte[1024]; int mLength; while ((mLength = mInput.read(mBuffer))>0) { mOutput.write(mBuffer, 0, mLength); } mOutput.flush(); mOutput.close(); mInput.close(); } //데이터베이스를 열어서 쿼리를 쓸수있게만든다. public boolean openDataBase() throws SQLException { String mPath = DB_PATH + DB_NAME; //Log.v("mPath", mPath); mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); return mDataBase != null; } @Override public synchronized void close() { if(mDataBase != null) mDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }

위에 Table에서 생성한 Record에 맞는 Model을 만든다.(예를들어 user.class)

public class User { public String id; // 사용자 id public String name; // 사용자명 public String account; // 계정명 public String privateKey; // 개인키 public String secretKey; // 비밀키 public String comment; // 메모 및 주석 // TODO : get,set 함수 생략 }

DataAdapter.class를 만든다.

table 이름을 기재해서 사용한다. 생성자에서 활용할수도있다.

public class DataAdapter { protected static final String TAG = "DataAdapter"; // TODO : TABLE 이름을 명시해야함 protected static final String TABLE_NAME = "some_table"; private final Context mContext; private SQLiteDatabase mDb; private DataBaseHelper mDbHelper; public DataAdapter(Context context) { this.mContext = context; mDbHelper = new DataBaseHelper(mContext); } public DataAdapter createDatabase() throws SQLException { try { mDbHelper.createDataBase(); } catch (IOException mIOException) { Log.e(TAG, mIOException.toString() + " UnableToCreateDatabase"); throw new Error("UnableToCreateDatabase"); } return this; } public DataAdapter open() throws SQLException { try { mDbHelper.openDataBase(); mDbHelper.close(); mDb = mDbHelper.getReadableDatabase(); } catch (SQLException mSQLException) { Log.e(TAG, "open >>"+ mSQLException.toString()); throw mSQLException; } return this; } public void close() { mDbHelper.close(); } public List getTableData() { try { // Table 이름 -> antpool_bitcoin 불러오기 String sql ="SELECT * FROM " + TABLE_NAME; // 모델 넣을 리스트 생성 List userList = new ArrayList(); // TODO : 모델 선언 User user = null; Cursor mCur = mDb.rawQuery(sql, null); if (mCur!=null) { // 칼럼의 마지막까지 while( mCur.moveToNext() ) { // TODO : 커스텀 모델 생성 user = new User(); // TODO : Record 기술 // id, name, account, privateKey, secretKey, Comment user.setId(mCur.getString(0)); user.setName(mCur.getString(1)); user.setAccount(mCur.getString(2)); user.setPrivateKey(mCur.getString(3)); user.setSecretKey(mCur.getString(4)); user.setComment(mCur.getString(5)); // 리스트에 넣기 userList.add(user); } } return userList; } catch (SQLException mSQLException) { Log.e(TAG, "getTestData >>"+ mSQLException.toString()); throw mSQLException; } } }

Activity에서 initLoadDB를 통해, 테이블의 모든 데이터를 userlist로 받는다.

public List<User> userList ; private void initLoadDB() { DataAdapter mDbHelper = new DataAdapter(getApplicationContext()); mDbHelper.createDatabase(); mDbHelper.open(); // db에 있는 값들을 model을 적용해서 넣는다. userList = mDbHelper.getTableData(); // db 닫기 mDbHelper.close(); }

userList를 이용해서 RecyclerView로 View를 구현한다던가, Sorting을 한다던가 할 수 있다.

중요한건 table에 있는 데이터를 다 가져왔다는것이다.

안드로이드 앱 관련 개발 및 유지보수 등 문의주세요

Toplist

최신 우편물

태그