안드로이드 애플리케이션에서 존재하는 데이터베이스를 사용하는 방법이 뭔강?

조회수 4156회

제가 이미 SQLite로 데이터베이스를 만들었는데요. 이 데이터베이스파일을 제 안드로이드 프로젝트에서 쓰고 싶어요. 새로 데이터베이스를 만드는거 말고 기존의 데이터베이스에 어떻게 접근할수있을까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    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();
    

    이런식으로 쓰시면 됩니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)