2014-07-22 1 views
0

나는 오류 얻을안드로이드 SQLiteException는 이러한 열

public int getKeyId(int table, int row, int column) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    Cursor cursor = db.query(DB_TABLE, new String[] { KEY_ID }, KEY_TABLE+ "=?" + " AND " 
      + KEY_ROW+ "=?" + " AND "+ KEY_COLUMN+ "=?", 
      new String[] { String.valueOf(table), String.valueOf(row), 
      String.valueOf(column)}, null, null, null, null); 
    if (cursor.getCount()==0) { 
     return -1; 
    } 
    return cursor.getInt(0); 
} 

를이 내가 데이터베이스를 만드는 데 사용하는 문자열 :

private static final String TAG = "SQLiteOpenHelper"; 
private static final String DB_NAME = "apps_tables"; 
private static final int DB_VERSION = 1; 
private static final String DB_TABLE = "apps"; 
/** 
* Columns 
*/ 
private static final String KEY_ID = "_id"; 
private static final String KEY_TABLE = "app_table"; 
private static final String KEY_ROW = "app_row"; 
private static final String KEY_COLUMN = "app_column"; 
private static final String KEY_NAME = "app_name"; 

/** 
* Creation statement 
*/ 
private static final String DB_CREATE = "CREATE TABLE " + DB_TABLE + " (" + KEY_ID + 
     " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TABLE + " INTEGER NOT NULL, " 
     + KEY_ROW + " INTEGER NOT NULL, " + KEY_COLUMN + " INTEGER NOT NULL, " + 
     KEY_NAME +" TEXT NOT NULL);"; 

에서 onCreate 호출 :

database.execSQL(DB_CREATE); 

아무도 왜이 오류가 발생하는지 알고 있습니까? 감사합니다.

+0

DDMS를 사용하여 데이터베이스를 가져 와서 모든 열이 있는지 확인할 수 있습니까? – dsum27

답변

4

이동으로도이 코드를 시도하고 다시 실행합니다.

업데이트 또는 resintsalled 데이터베이스의 앱이 Android에서 삭제되지 않기 때문에이 문제가 발생했습니다. 이 경우 SQLiteOpenHelper는 onCreate (SQLiteDatabase db)를 호출하지 않고 데이터베이스 버전 업데이트를 확인합니다. 당신은 데이터베이스 버전을 업데이트하지 않았고 onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) 메서드를 제대로 작성하지 않았기 때문에 이전 데이터베이스에 열이 존재하지 않습니다. 응용 프로그램 데이터를 지우고 데이터베이스를 지우면 응용 프로그램을 다시 시작하면 다시 onCreate (SQLiteDatabase db)가 호출되므로 create sql이 다시 실행되고 그 예외는 발생하지 않습니다. 이를 수행하는 실제 방법은 데이터베이스 버전을 증가시키고 onUpgrade 메소드를 사용하여 데이터베이스 변경을 변경하는 것입니다.

devlopment 용도로는 일반 앱 데이터를 사용할 수 있지만 프로덕션 환경에서는 데이터베이스 버전을 업그레이드하고 onUpgrade 메소드를 사용하십시오.

+0

설명을 추가해 주셔서 감사합니다. 이전 데이터베이스가 동일했기 때문에 나는 이것을 알아 채지 못했지만 작성하는 문장은 잘못되었습니다. – lotdrops

0

이러한 열 오류는 테이블의 생성에 성공을 가지고 있지만 해당 테이블의 컬럼의 창조 이해에 따라 있도록 의미

테이블 명령이 실행 얻을하지만 난 당신이 열을 확인하십시오 그렇게 형성되지 생각 생성 당신의 쿼리를 sqlite에서이 쿼리를 실행 browesr이 잘 작동하지 않는지 확인하십시오?

private static final String DB_CREATE = "CREATE TABLE " + DB_TABLE + " (" + KEY_ID + 
     " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TABLE + " INTEGER NOT NULL, " 
     + KEY_ROW + " INTEGER NOT NULL, " + KEY_COLUMN + " INTEGER NOT NULL, " + 
     KEY_NAME +" TEXT NOT NULL);"; 

당신의 오류는 테이블이 거기에 존재한다> DATA 폴더 DDMS 데이터로이 라인

검사로 인해오고있다?

앱 데이터를 삭제 설정으로에서 onCreate 방법 sqliteopnhelper의 클래스

public void onCreate(SQLiteDatabase db) { 

db.execSQL(" CREATE TABLE " + DB_TABLE + " (" + 
     KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     KEY_TABLE + " INTEGER NOT NULL, " + 
     KEY_ROW + " INTEGER NOT NULL, " + 
     KEY_COLUMN + " INTEGER NOT NULL, " + 
     KEY_NAME + " INTEGER NOT NULL);"); 
} 
관련 문제