2013-07-22 5 views
0

기존 sqlite 데이터베이스가 있습니다. 안드로이드 애플 리케이션을 개발 중이며이 기존 sqlite DataBase와 연결하려고합니다.기존 sqlite 데이터베이스에서 데이터 가져 오기

문제 1 : 나는 이미 내 강사의 조언에 따라 "DDMS 푸시 데이터베이스 기능"을 통해 내 프로젝트에서 SQLite는 데이터베이스를 포함했다. 이제 데이터베이스에서 데이터를 가져오고 싶습니다. SQLiteOpenHelper를 사용해야합니까? 그렇다면 사용 방법과 onCreate (SQLiteDatabase db) 함수 및 onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) 함수로 코딩 된 내용은 이미 데이터베이스가 있으므로 우리는 실제로 생성 할 필요가 없습니다 .

문제점 2 : 기존 데이터베이스에서 필수 데이터를 가져 오려면 어떻게해야합니까?

초보자 인 나는 매우 혼란 스럽다. 누군가이 개념을 설명하고 나를이 문제를 극복하도록 안내해 줄 수 있는가? 어떤 도움을 주시면 감사하겠습니다.

@TronicZomB에 의해 sugggested 된 튜토리얼을 보았지만이 자습서 (http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/)에 따르면 모든 테이블에 _id로 기본 키 필드가 있어야합니다.

대상, 이벤트, 둘러보기, tour_cat, tour_dest, android_metadata 및 sqlite_sequence라는 7 개의 테이블이 있습니다. 전체적으로 tour_dest만이 _id로 명명 된 기본 키를 갖는 조건을 충족시키지 못합니다. 이걸 어떻게 알아낼 수 있니?

다음은 데이터베이스 테이블의 바인딩 ID 필드에 필요한 기본 키 필드가없는 테이블의 스크린 샷입니다. Screenshot of table which is lacking the primary key field necessary for binding id fields of database tables.

답변

4

onCreateonUpgrade 메서드는 이미 데이터베이스가 있으므로 비어 있습니다. 이 방법을 달성하는 방법에 대한 훌륭한 자습서가 here입니다. 당신은 쿼리, 데이터베이스와 매우 편안하지 않는 한 그것은 또한 많이 제거, 내가보기 엔 당신이 http://satyan.github.io/sugar/를 사용하는 것이 좋습니다 등

public ArrayList<String> getValues(String table) { 
    ArrayList<String> values = new ArrayList<String>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery("SELECT value FROM " + table, null); 

    if(cursor.moveToFirst()) { 
     do { 
      values.add(cursor.getString(cursor.getColumnIndex("value"))); 
     }while(cursor.moveToNext()); 
    } 

    cursor.close(); 
    db.close(); 
    return values; 
} 
+0

는 그 혀를 보았다,하지만 난 그에 관한 사소한 문제를 가지고있다. 모든 테이블에 필드 _id가 있어야한다고 나와 있습니다. 하지만 나에게는 주요 키 필드가없는 테이블이 있습니다. 그리고 튜토리얼에 따라 _id라는 기본 키 필드가 있어야합니다. 이제는 데이터 손실이 될 테이블을 다시 만들어야합니다. 무엇을해야 .. – divyang7

+0

흠 ...그 튜토리얼을 사용하고 하나의 테이블에 "ID"와 내 다른 테이블의 아무도 기본 키 정수를 가지고 내 ID 열을 가지고 그것은 나를 위해 잘 작동 ... – TronicZomB

+0

내 질문을 편집하고 너무 현재의 이미지를 포함 시켰습니다 기본 키 _id가없는 테이블의 구조. 나머지 모든 테이블에는 기본 키 _id가 있으므로 사용자가 제공 한 자습서의 조건을 충족시킵니다. – divyang7

1

:

당신은 다음과 같은 (예)와 같은 데이터베이스에 액세스 할 수 보일러 플레이트 코드가 안드로이드

1

1 DB가 이미 존재하는 경우에 SQLite는 할 필요 onCreate가 호출되지 않습니다. onUpgrade은 DB 버전을 변경하는 경우에만 호출됩니다. onUpgrade APP 데이터베이스에 몇 가지 변경 사항이있을 경우 사용해야하며 새 데이터 구조를 원활하게 마이그레이션해야합니다.

public class DbInit extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "name"; 
    private static final int DATABASE_VERSION = 3; 
    private static final String DATABASE_CREATE = "create table connections . .. . ... 

    public DbInit(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database) { 
     database.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     if (isChangeFromToVersion(1, 2, oldVersion, newVersion)) { 
      //Execute UPDATE here 
     } 
    } 

    private boolean isChangeFromToVersion(int from, int to, int oldVersion, int newVersion) { 
     return (from == oldVersion && to == newVersion); 
    } 
.... 

2 간단한 예제는 DB에 연결을 열고 커서 객체를 얻을 수 있습니다.

공용 클래스 DAO {

private SQLiteDatabase database; 
private DbInit dbHelper; 

public ConnectionDAO(Context context) { 
    dbHelper = new DbInit(context); 
} 

public void open() throws SQLException { 
    database = dbHelper.getWritableDatabase(); 
} 

public Connection getConnectionById(long id) { 
    Cursor cursor = null; 
    try { 
     open(); 
     cursor = database.query(DbInit.TABLE_CONNECTIONS, allColumns, DbInit.COLUMN_ID + " = '" + id + "'", null, null, null, null); 
     if (!cursor.moveToFirst()) 
      return null; 
     return cursorToConnection(cursor); 
    } finally { 
     if (cursor != null) 
      cursor.close(); 
     close(); 
    } 
} 

private Connection cursorToConnection(Cursor cursor) { 
    Connection connection = new Connection(); 
    connection.setId(cursor.isNull(0) ? null : cursor.getInt(0)); 
    connection.setName(cursor.isNull(1) ? null : cursor.getString(1)); 
    ..... 
    ..... 
    return connection; 
} 
관련 문제