2014-04-11 2 views
0

어플 리케이션을 설치했을 때 메리 엄 사전 (오프라인 사전)과 같은 일부 사전은 단어가 즉시 있으며, 단어와 정의 ​​목록을 데이터베이스에 삽입하는 데 시간이 필요하지 않습니까? 나는 초보자이며 현재 약 30K 단어로 구성된 안드로이드 응용 프로그램을 개발 중이며 사용자가 특정 데이터를 검색하기 전에 데이터베이스에 모든 데이터를 삽입하는 데 약 15 분 이상이 소요됩니다. 그리고이 문제를 해결할 수있는 방법을 찾고 있습니다. 누군가 제게 그것을 할 수있는 방법을 말해 줄 수 있습니까? 데이터가 하나씩 삽입 될 때까지 기다릴 필요없이 데이터를 데이터베이스에 저장하는 방법은 무엇입니까?

는 설치의 당신이

+0

"약 15 분 이상 소요"- 파일을 읽고 그 방식으로 DB를 만들고 있습니까? 더 빨리/assets /에있는 sqlite db를 사용하여 배송하고 즉시 사용할 수 있도록 데이터 디렉토리에 복사하는 것이 더 빠릅니다. 여기를 참조하십시오 : http://stackoverflow.com/questions/6198528/how-to-create-sqlite-database-at-the-time-of-android-app-installation –

답변

1

내 생각 엔이 응용 프로그램은 이미 필요한 모든 데이터가 채워진 SQLite 데이터베이스를 사용하고 있습니다. 당신은이 같은 뭔가 앱에 인구 데이터베이스를 가져올 수 있습니다

공용 클래스 DataBaseAdapter {

String DB_NAME = "DBNAME.db"; 
String DIR = "/data/data/packageName/databases/"; 
String DB_PATH = DIR + DB_NAME; 

private DataBaseHelper mDbHelper; 
private SQLiteDatabase db; 
private Context context; 

public DataBaseAdapter(Context context) { 
    this.context = context; 
    mDbHelper = new DataBaseHelper(this.context); 
} 

class DataBaseHelper extends SQLiteOpenHelper { 
    private boolean createDatabase = false; 
    @SuppressWarnings("unused") 
    private boolean upgradeDatabase = false; 
    Context context; 

    public DataBaseHelper(Context context) { 
     super(context, DB_NAME, null, 1); 
     this.context = context; 
    } 

    public void initializeDataBase() { 

     getWritableDatabase(); 

     if (createDatabase) { 
      try { 
       copyDataBase(); 
      } catch (IOException e) { 
       throw new Error("Error copying database"); 
      } 
     } 

    } 

    private void copyDataBase() throws IOException { 
     InputStream input = context.getAssets().open(DB_NAME); 
     OutputStream output = new FileOutputStream(DB_PATH); 

     byte[] buffer = new byte[1024]; 
     int length; 

     try { 
      while ((length = input.read(buffer)) > 0) { 
       output.write(buffer, 0, length); 
      } 
     } 

     finally { 
      try { 
       if (output != null) { 
        try { 
         output.flush(); 
        } finally { 
         output.close(); 
        } 
       } 
      } finally { 
       if (input != null) { 
        input.close(); 
       } 
      } 
     } 

     getWritableDatabase().close(); 
    } 

    public void onCreate(SQLiteDatabase db) { 

     createDatabase = true; 
    } 

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

     upgradeDatabase = true; 

    } 

    public void onOpen(SQLiteDatabase db) { 
     super.onOpen(db); 
    } 
} 

public DataBaseAdapter open() { 
    mDbHelper.initializeDataBase(); 
    if (db == null) 
     db = mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    db.close(); 
} 

은}

당신이 다음 데이터베이스에서 데이터를 가져 오는 방법을 추가 할 수 있습니다

이 클래스를 사용할 수 있습니다 귀하의 활동에 열려 다음 데이터를 얻을 수있는 방법을 호출하여 닫습니다.

+0

umm "가져온 데이터가 많이 들어있는 데이터베이스"가 무엇으로 구성되어야하는지 알 수 있습니까? insert 문 목록이 포함되어 있어야합니까? – AuroraBlaze

+0

예 행이 이미 가득차있는 데이터베이스 ... –

+0

이 섹션에 대한 연구를 했었지만 다음으로 채워진 데이터베이스를 가져야한다는 것을 알았습니다. 채워진 데이터베이스를 얻는 방법/추출 된 데이터베이스를 신청? – AuroraBlaze

0

애플리케이션 오프라인 액세스를 위해 미리 채워진 데이터베이스를 포함해야한다 감사드립니다. 이렇게하면 각 사용자가 장치에서 INSERT 단계를 실행하지 않아도됩니다.

삽입 사후 설치 프로그램을 실행해야하는 특별한 이유가 있습니까?

+0

나는 merrian 사전과 비슷하게 만들고 싶습니다. 하지만 그것을 구현하는 방법을 잘 모르겠습니다, 그래서 내가 데이터베이스에 삽입하기 전에 그것은 먼저 단어를 2 부분으로 분리됩니다 txt 파일에 단어 목록을 가지고로서 당분간 삽입을 사용하고 있습니다, 그러나 그것은 모든 것을로드하기 위해 약 15 분이 걸립니다. 미리 채워진 데이터베이스는 무엇으로 구성되어야합니까? 내가 참조 할 수있는 자습서가 있습니까? – AuroraBlaze

관련 문제