2013-07-20 4 views
0

퀴즈 게임을 만들고 있는데 SQLite 데이터베이스를 사용하여 300 개 이상의 질문을 저장하고 임의로 하나를 선택합니다. 내가 연구했고 테이블을 생성하고 업데이트하는 방법, Android 앱 내에서 행을 추가, 수정 및 삭제하는 방법을 알고 있지만 내 앱을 이미 완료된 데이터베이스 (읽기 전용 데이터베이스에 저장 됨)에 연결할 수있는 방법을 찾지 못했습니다. 리소스 (자산) 폴더).퀴즈 게임용 안드로이드 SQLite 데이터베이스

도와 주시겠습니까?

+0

그냥 생각
:이 파일을 구문 분석하는 것이 더하지 않을까요 (JSON/XML을/무엇이든 ..) 응용 프로그램은 첫째 응용 프로그램의 내부에 시작할 때 데이터 베이스? 자산 파일이 데이터베이스 파일이어야합니까? – iBecar

답변

0

당신은 설치된 응용 프로그램에 자산 폴더에서 DB 파일을 복사해야합니다.

public class DatabaseOpenHelper extends SQLiteOpenHelper { 

private final static String DB_NAME = "YourDatabaseFile.sqlite"; 
private static String DB_PATH = "/data/data/%s/databases/"; 
private final String ERROR_TAG = "error"; 
private final static int DB_VERSION = 1; 
private final int BUFFER_SIZE = 8 * 1024; 
private SQLiteDatabase databaseHandle; 

private final Context context; 

public DatabaseOpenHelper(Context context) { 
    super(context, DB_NAME, null, DB_VERSION); 

    this.context = context; 
    DB_PATH = String.format(DB_PATH, context.getPackageName()); 
} 

public SQLiteDatabase openDataBase() { 
    try { 
     String databasePath = DB_PATH + DB_NAME; 
     if (databaseHandle == null) { 
      createDataBase(); 
      databaseHandle = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE); 
     } 
    } 
    catch (SQLiteException e) { 
     throw new IllegalStateException(context.getResources().getString(R.string.err_opening_db), e); 
    } 
    return databaseHandle; 
} 

private boolean createDataBase() { 
    try { 
     if (!isDataBase()) { 
      this.getReadableDatabase(); 
      copyDataBase(); 
      return true; 
     } 
    } 
    catch (SQLiteException e) { 
     throw new IllegalStateException(context.getResources().getString(R.string.err_opening_db), e); 
    } 
    catch (IOException e){ 
     Log.e(ERROR_TAG, context.getResources().getString(R.string.err_close_stream), e); 
    } 

    return false; 
} 

public boolean isDataBase() { 
    SQLiteDatabase verifiableDatabase = null; 
    try { 
     String databasePath = DB_PATH + DB_NAME; 
     verifiableDatabase = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READONLY); 
     verifiableDatabase.close(); 
    } 
    catch (SQLiteException e) { 
     Log.e(ERROR_TAG, context.getResources().getString(R.string.err_opening_db), e); 
     return false; 
    } 

    return true; 
} 

private void copyDataBase() throws IOException { 
    InputStream externalDbStream = null; 
    OutputStream localDbStream = null; 
    try { 
     externalDbStream = context.getAssets().open(DB_NAME); 
     localDbStream = new FileOutputStream(DB_PATH+DB_NAME); 

     byte[] buffer = new byte[BUFFER_SIZE]; 
     int bytesRead; 

     while ((bytesRead = externalDbStream.read(buffer)) > 0) { 
      localDbStream.write(buffer, 0, bytesRead); 
     } 
    } 
    catch (IOException e) { 
     throw new IllegalStateException(context.getResources().getString(R.string.err_copying_db), e); 
    } 
    finally { 
     if (localDbStream != null) 
      localDbStream.close(); 
     if (externalDbStream != null) 
      externalDbStream.close(); 
    } 
} 

@Override 
public void close() { 
    databaseHandle.close(); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
}} 

사용 : 예를 들어
DatabaseOpenHelper dbHelper = new DatabaseOpenHelper(context);
SQLiteDatabase database = dbHelper.openDataBase();

0

이것은 매우 복잡합니다.별로 복잡하지는 않지만 프로그래밍을해야합니다. 자산 폴더에서 데이터베이스를 읽는 것은 직접 불가능합니다. 내부 저장소 또는 SD 카드에 복사해야합니다. 우측 포인트가 시작하는 것은 이것이 여기 설명 많이하는 것입니다하려면,이 튜토리얼을 읽어 보시기 바랍니다 :

http://zaman91.wordpress.com/2010/09/22/android-how-to-use-own-sqlite-database/

관련 문제