2013-01-23 2 views
0

내 응용 프로그램은 간단한 테이블을 만들 수 없습니다.android에서 테이블을 만들 수 없습니다.

DatabaseHandler.java, 아래의 코드를 볼

MainActivity.java에서
public class DatabaseHandler extends SQLiteOpenHelper { 

private static final int DB_VERSION = 1; 
private static final String DB_NAME = "PASSENGER_INFO_DB"; 
private static final String TABLE_NAME = "PASSENGER_INFO"; 
private static final String TABLE_COLUMN_SEAT_NO = "SEAT_NO"; 
private static final String TABLE_COLUMN_NAME = "NAME"; 
private static final String TABLE_COLUMN_AGE = "AGE"; 
private static final String TABLE_COLUMN_GENDER = "GENDER"; 
private static final String TABLE_COLUMN_FOOD_PREF = "FOOD_PREF"; 

private static final String CREATE_PASSENGER_INFO_TABLE = "CREATE TABLE IF NOT EXISTS " 
     + TABLE_NAME + " (" + TABLE_COLUMN_SEAT_NO 
     + " TEXT PRIMARY KEY, " + TABLE_COLUMN_NAME + " TEXT, " 
     + TABLE_COLUMN_AGE + " INTEGER, " + TABLE_COLUMN_GENDER 
     + " INTEGER, " + TABLE_COLUMN_FOOD_PREF + " TEXT" + ")"; 

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

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_PASSENGER_INFO_TABLE); 
} 
public void addPassengerInfo(PassengerInfo passInfo) { 
    SQLiteDatabase addPass = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    values.put(TABLE_COLUMN_SEAT_NO, passInfo.getM_seatNo()); 
    values.put(TABLE_COLUMN_NAME, passInfo.getM_name()); 
    values.put(TABLE_COLUMN_AGE, passInfo.getM_age()); 
    values.put(TABLE_COLUMN_GENDER, passInfo.getM_gender()); 
    values.put(TABLE_COLUMN_FOOD_PREF, passInfo.getM_foodPref()); 

    addPass.insert(TABLE_NAME, null, values); 
    addPass.close(); 
} 

DatabaseHandler dbhandler = new DatabaseHandler(this); 
addSeat = "1A"; 
passName = "NA"; 
passAge = 0; 
passGender = -1; 
passFoodPref = "NA"; 
dbhandler.addPassengerInfo(new PassengerInfo(addSeat, passName, passAge, passGender, passFoodPref)); 

(PassengerInfo.class 필드에 대한 getter와 setter 메소드가)

때하세요 이걸 실행하면 logcat에 다음 오류가 표시됩니다.

01-23 19:09:18.311: I/Database(1303): sqlite returned: error code = 1, msg = table PASSENGER_INFO has no column named SEAT_NO 
01-23 19:09:18.370: E/Database(1303): Error inserting FOOD_PREF=NA NAME=NA AGE=0 GENDER=-1 SEAT_NO=1A 

또한 adb 셸을 통해 데이터베이스에 생성 된 테이블을 검사했습니다. 이름이 PASSENGER_INFO 인 테이블이 없습니다. 도와주세요! ");"

+0

오류 메시지에 명확하게 설명 된대로 PASSENGER_INFO 테이블이 있어야합니다. DB를 어디서 찾고 있습니까? –

+0

테이블에'_id' 컬럼을 추가 했습니까? –

+0

http://stackoverflow.com/questions/10349337/creating-tables-in-sqlite-database-on-android –

답변

0

데이터베이스 번호를 늘려 보셨습니까? 또한,의 ROWID를 대표하는 데이터베이스 버전 번호 및 다시 실행을 업데이트합니다 별도의 열을 추가

+ TABLE_COLUMN_SEAT_NO 
    + " TEXT, " 

이 줄

+ TABLE_COLUMN_SEAT_NO 
    + " TEXT PRIMARY KEY, " 

을 변경해보십시오.

0

당신은 테이블을 만들

+ " TEXT" + ");"; 
+0

나는 이것을 시도했지만 여전히 같은 문제에 직면 해있다. –

0

애프터 세미콜론을 마지막에에서 반도체 누락 및의 쿼리가 누락되었습니다. 시는 데이터베이스에 데이터를 삽입하는 방법은

db.execSQL(" CREATE TABLE " + DATABASE_MARKSTABLE + " (" + 
       "SEAT_NO" + " TEXT PRIMARY KEY, " + 
       "NAME" + " TEXT NOT NULL, " + 
       "AGE" + " INTEGER NOT NULL, " + 
       "GENDER" + " INTEGER NOT NULL, " + 
       "FOOD_PREF" + " TEXT);" 
     ); 
+0

세미콜론으로 시도한 후 ");" 그러나 아무 사용. 감사 ! –

0

내가 테이블을 생성 가정 것처럼

 ContentValues row = new ContentValues(); 
    row.put("SEAT_NO",tid); 
    row.put("NAME", sid); 
    row.put("AGE", rsubject); 
    row.put("GENDER",rdescr); 
    row.put("FOOD_PREF", day); 


    long chk = db.insert("PASSENGER_INFO",null, row); 

이 또한 적절한 쿼리 (것에 대한 Contentvalues에게를 사용해야합니다 권장되지 않는다 PASSENGER_INFO)를 나중에 추가 할 경우 SEAT_NO 열이 표시되지 않습니다. 당신이해야 할 일은 DB_VERSION을 증가시키고 어플리케이션을 다시 실행하는 것입니다. DatabaseHandler의 onUpdate()이 실행됩니다. 해당 코드를 표시하지 않았지만 잘하면 테이블을 삭제 한 다음 onCreate()을 호출하여 테이블을 다시 작성합니다 (이제 SEAT_NO 열로).

사이드 노트 : 내가 가지고있는 테이블의 프라이 머리 키를 _id으로 바꿀 것입니다. 물론 한 개의 좌석 수만 저장할 수 있습니다 ... 물론 디자인은 당신에게 달려 있습니다.

관련 문제