2012-05-27 2 views
1

이것은 내 데이터베이스 어댑터 클래스입니다. 나는 그것을 연결하고 데이터베이스를 쿼리하는 데 사용한다."테이블이 생성되지 않았습니다"라는 오류 메시지가 나타나는 이유는 무엇입니까? 그 잡은 거니?

package com.Coursework.AppointmentRecorder; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBAdapter { 
    public static final String KEY_ROWID = "_id"; 
    public static final String APP_TITLE = "title"; 
    public static final String APP_DATE = "date"; 
    public static final String APP_TIME = "time"; 
    public static final String APP_DETAILS = "details"; 
    private static final String TAG = "DBAdapter"; 
    private static final String DATABASE_NAME = "NewUser"; 
    private static final String DATABASE_TABLE = "Appointment"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_CREATE = 
    "CREATE TABLE Appointment (_id integer primary key autoincrement, " 
    + "title text not null, date text not null, time text not null, " 
    + "details text not null);"; 
    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 
    public DBAdapter(Context ctx) { 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper { 
    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

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

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion 
     + " to " + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS titles"); 
     onCreate(db); 
    } 
    } 

    public DBAdapter open() throws SQLException { 
    db = DBHelper.getWritableDatabase(); 
    return this; 
    } 

    //---closes the database--- 
    public void close() { 
    DBHelper.close(); 
    } 

    //---insert a title into the database--- 
    public long insertAppointment(String title,String Date, String time, String details) { 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(APP_TITLE, title); 
    initialValues.put(APP_DATE, Date); 
    initialValues.put(APP_TIME, time); 
    initialValues.put(APP_DETAILS, details); 
    return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    //---deletes a particular title--- 
    public boolean deleteTitle(long rowId) { 
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    } 

    //---retrieves all the titles--- 
    public Cursor getAllTitles() { 
    return db.query(DATABASE_TABLE, new String[] { 
     KEY_ROWID, 
     APP_TITLE, 
     APP_TIME, 
     APP_DETAILS 
    }, 
    null, 
    null, 
    null, 
    null, 
    null); 
    } 

    //---retrieves a particular title--- 
    public Cursor getTitle(long date) throws SQLException { 
    Cursor mCursor = db.query(false, DATABASE_TABLE, new String[] { 
    KEY_ROWID, 
    APP_TITLE, 
    APP_TIME, 
    APP_DETAILS 
    }, 
    APP_DATE + "=" + date, 
    null, 
    null, 
    null, 
    null, 
    null); 
    if (mCursor != null) { 
    mCursor.moveToFirst(); 
    do { 
    } while (mCursor.moveToNext()); 
    } 
    return mCursor; 
} 

    //---updates a title--- 
    public boolean updateTitle(long rowId, String isbn, String title, String publisher) { 
    ContentValues args = new ContentValues(); 
    args.put(APP_TITLE, isbn); 
    args.put(APP_TIME, title); 
    args.put(APP_DETAILS, publisher); 
    return db.update(DATABASE_TABLE, args, 
    KEY_ROWID + "=" + rowId, null) > 0; 
    } 
} 

오전 데 문제는 내가 다른 클래스에 항목을 만들 때, 첫째와 같이 DB를 열어 I이 호출이다 :

final DBAdapter db = new DBAdapter(this); 

를 그리고 나서이 명령을 실행하려고, 그러나 카탈로그는 그러한 테이블이 없다는 것을 계속해서 알려주고 SQL Exception을 제공합니다.

db.open(); 
long id = db.insertAppointment(Title.getText().toString(), 
    String.valueOf(SDate), 
    Jack.getText().toString(), 
    details.getText().toString() 
); 
alertDialog.setTitle("Appoinment Manager"); 
alertDialog.setMessage("The Appointment Has Been Created."); 
alertDialog.show(); 
db.close(); 

누군가 실수를 알 수 있으며 왜 테이블이 만들어지지 않는지 알 수 있습니까?

답변

3

데이터베이스 구조를 수정하고 잊어 버렸습니다. 버전을 늘리십시오. 즉, 새 테이블없이 이전 DB를 계속 사용하게됩니다.

onUpgrade 메서드가 실행되어 문제가 발생하지 않도록 데이터베이스 버전을 증가시키고 응용 프로그램을 실행하십시오.

+0

mg. 당신은 Genious입니다 : D Thankooooooo .... :) –

관련 문제