2010-06-22 5 views
1

재미있는 사실 (및 출처)을 표시하는 앱을 작성 중입니다. 사용자는 하나씩 사실을 탐색 할 수 있습니다.앱이 설치 될 때 초기 SQLite 데이터베이스 만들기

다음은 내가 생각한 디자인입니다.
재미있는 사실을 저장하는 텍스트 열과 원본을 저장하는 두 번째 열로 SQLiteDatabase에 테이블을 만듭니다. (이것이 최선의 방법인지 확실하지 않지만 네트워크가 없어도 응용 프로그램을 사용할 수 있기를 바랍니다)

제 질문은 데이터베이스를 처음 장치에서 만들 때 수동으로 데이터베이스를 채워야합니까? 이 pseodo 코드와 같은 코드, 뭔가 내 : - 응용 프로그램이 설치 될 때

@Override 
public void onCreate(SQLiteDatabase db) { 

    //Create the table 

    //Populate the table 
     //Insert statement 1 
     //Insert statement 2 
     //Insert statement 3 
          ... 
     //Insert statement 500 

} 

는 확실히 초기 데이터베이스를 생성하는 더 나은 방법이 있어야한다?

답변

2

정말 데이터베이스가 필요하신가요? 그렇게 사소한 오버 헤드를 추가하지 않습니까?

코드에서 배열을 선언 할 수 없습니까? 아니면 뭔가 빠졌습니까? db 또는 코드에 관계없이 공간을 차지합니다. db에 약간의 오버 헤드가 추가되고로드가 걸릴 것입니다. 코드가 에러를 처리해야합니다.

코드에 선언 된 간단한 배열을 사용하는 것이 좋지 않을까요? 아니면 내가 뻔한 것을 misisng 오전? (어쩌면 사용자가 새 데이터베이스를 만들 수 있겠습니까?하지만 새 프로그램을 추가하는 것보다 훨씬 많은 오버 헤드가 있습니까?)

내가 꺼져있는 경우 설명하십시오 (downvoting보다는). 나는 도우려고 노력하고있다


편집 : 아마 당신은 사실을 이미 알고 있니? 어쩌면 텍스트 파일에 있습니까? 그것을 구문 분석하고 초기화 및 배열 (또는 db 채우기) 코드를 작성할 수 있습니다. 그것은 근본적으로 짧은 반복문이어야합니다.

+0

안녕하십니까, 질문에 시간을내어 주셔서 감사합니다. 각 사실에는 그것에 첨부 된 출처가 있습니다. 그래서 저는 2 열의 테이블 (id를 포함한 3 개의 컬럼)을 생각했습니다. 다음 번에 사용자가 앱에 액세스 할 때 다음 사실을 보여주기 위해 이드를 추적하고 싶습니다. 첫 번째 사실은 다시 시작하지 않습니다. 나는 2-d 배열을 할 수 있고 기본 설정에서 중단 된 인덱스 번호를 추적 할 수 있다고 가정합니다. 최고의 디자인 솔루션이 무엇인지 잘 모릅니다. 희망이 내 대답을 이해합니다. – OceanBlue

+2

LeonixSolutions와 동의합니다. 당신은 당신의 사실을 어딘가에 가지고 있습니다. 이미 텍스트 형식 (csv, xml, 뭐든간에) 인 경우 res/raw 디렉토리에 해당 파일을 저장할 수 있으며 직접 설치하거나 데이터베이스를 채울 때 설치할 수 있습니다. –

+0

위대한 !! 감사. – OceanBlue

1

SQLiteOpenHelper

public class myDatabase extends SQLiteOpenHelper 
{ 
    private static final String  DB_NAME  = "database.db"; 
    private static final int DB_VERSION = 1; 

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

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     db.execSQL("CREATE TABLE tbl_test (id INTEGER PRIMARY KEY AUTOINCREMENT, test TEXT NOT NULL)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     db.execSQL("DROP TABLE IF EXISTS tbl_test"); 
     onCreate(db); 
    } 
} 

당신이 모든 호출에이 같은

myDatabase db = new myDatabase(getApplicationContext()); 

sql = "INSERT INTO tbl_test (test) VALUES ('xyz')"; 
db.getWritableDatabase().execSQL(sql); 

String sql = "SELECT id FROM tbl_test"; 
Cursor result = db.getWritableDatabase().rawQuery(sql, null); 

int value; 

while(result.moveToNext()) 
{ 
     value = result.getInt(0); 
} 

을 사용할 수 있습니다 www.xenonite.net 난 이미 내 블로그에이 obout STH를 썼다에서 파생 된 클래스를 사용 to db, myDatabase.onCreate()가 호출되므로 데이터베이스가 처음 실행될 때 생성됩니다. 테이블 구조를 변경할 때 onUpgrade()를 구현하고 DB_VERSION을 증가 시키십시오.

관련 문제