안드로이드 애플리케이션에서 존재하는 데이터베이스를 사용하는 방법이 뭔강?
조회수 4093회
제가 이미 SQLite로 데이터베이스를 만들었는데요. 이 데이터베이스파일을 제 안드로이드 프로젝트에서 쓰고 싶어요. 새로 데이터베이스를 만드는거 말고 기존의 데이터베이스에 어떻게 접근할수있을까요?
1 답변
-
private static String DB_NAME ="YourDbName"; // Database name
YourDbName에 만들어놨던 데이터베이스의 이름을 넣으세요. 그리고 데이터베이스를 asset 폴더에 넣으세요. 데이터베이스의 이름이 ordersDB라면private static String DB_NAME ="ordersDB";
이렇게 하시면됩니다.DataHelper.class
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DataBaseHelper extends SQLiteOpenHelper { private static String TAG = "DataBaseHelper"; //Logcat에 출력할 태그이름 //디바이스 장치에서 데이터베이스의 경로 private static String DB_PATH = ""; private static String DB_NAME ="YourDbName"; // 데이터베이스 이름 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(); } }
DataAdapter.class
import java.io.IOException; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.util.Log; public class TestAdapter { protected static final String TAG = "DataAdapter"; private final Context mContext; private SQLiteDatabase mDb; private DataBaseHelper mDbHelper; public TestAdapter(Context context) { this.mContext = context; mDbHelper = new DataBaseHelper(mContext); } public TestAdapter createDatabase() throws SQLException { try { mDbHelper.createDataBase(); } catch (IOException mIOException) { Log.e(TAG, mIOException.toString() + " UnableToCreateDatabase"); throw new Error("UnableToCreateDatabase"); } return this; } public TestAdapter 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 Cursor getTestData() { try { String sql ="SELECT * FROM myTable"; Cursor mCur = mDb.rawQuery(sql, null); if (mCur!=null) { mCur.moveToNext(); } return mCur; } catch (SQLException mSQLException) { Log.e(TAG, "getTestData >>"+ mSQLException.toString()); throw mSQLException; } } }
그리고
TestAdapter mDbHelper = new TestAdapter(urContext); mDbHelper.createDatabase(); mDbHelper.open(); Cursor testdata = mDbHelper.getTestData(); mDbHelper.close();
이런식으로 쓰시면 됩니다.
댓글 입력