2017-02-11 60 views
0

我知道很多同名問題存在,但這次它是不同的,所以請完整閱讀。Android SQLite沒有這樣的表發現錯誤

我的SQLite的代碼如下

public class DBHandler extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "iListen"; 
    private static final String TABLE_NAME = "MeetingDetails"; 
    private static final String KEY_MEETING_NAME = "MeetingName"; 
    private static final String KEY_CONFERENCE_DESC = "ConferenceDescription"; 
    private static final String KEY_TIME = "MeetingTime"; 
    private static final String KEY_DURATION = "MeetingDuration"; 
    private static final String KEY_CREATE_TIME = "CreationTime"; 
    private static final String KEY_PRESENTER = "MeetingPresenter"; 
    private static final String KEY_MEETING_KEY= "MeetingId"; 
    private static final String KEY_MEETING_STATUS = "Flag"; 
    public DBHandler(Context context){ 
     super(context,DATABASE_NAME,null,DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_MEETING_TABLE = "CREATE TABLE " + TABLE_NAME + "(" 
       + KEY_MEETING_KEY + " INTEGER PRIMARY KEY," + KEY_MEETING_NAME+ " TEXT," +KEY_CONFERENCE_DESC+ " TEXT,"+ KEY_TIME+ " TEXT,"+KEY_DURATION+ " TEXT,"+KEY_CREATE_TIME+" TEXT,"+ 
       KEY_PRESENTER+" TEXT,"+KEY_MEETING_STATUS+" INTEGER"+")"; 
     db.execSQL(CREATE_MEETING_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS"+TABLE_NAME); 
     onCreate(sqLiteDatabase); 
    } 
    public long addMeeting(MeetingList meetingList){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues cValues = new ContentValues(); 
     cValues.put(KEY_MEETING_KEY, meetingList.getId()); 
     cValues.put(KEY_MEETING_NAME, meetingList.getMeetingName()); 
     cValues.put(KEY_CONFERENCE_DESC,meetingList.getConferenceDesc()); 
     cValues.put(KEY_TIME,meetingList.getTime()); 
     cValues.put(KEY_DURATION, meetingList.getDuration()); 
     cValues.put(KEY_CREATE_TIME, meetingList.getCreateTime()); 
     cValues.put(KEY_PRESENTER, meetingList.getPresenter()); 
     cValues.put(KEY_MEETING_STATUS,meetingList.getStatus()); 
     long output = db.insert(DATABASE_NAME,null,cValues); 
     db.close(); 
     return output; 
    } 
    public MeetingList getMeeting(Integer id){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
//  Cursor cr = db.query(TABLE_NAME,new String[]{KEY_MEETING_KEY,KEY_MEETING_NAME, KEY_CONFERENCE_DESC,KEY_TIME,KEY_DURATION,KEY_CREATE_TIME,KEY_PRESENTER,KEY_MEETING_STATUS},KEY_MEETING_KEY+"=?",new String[] 
//    {String.valueOf(id)},null,null,null,null); 
     Cursor cr = db.rawQuery("select * from "+TABLE_NAME+" where "+KEY_MEETING_KEY+" = ?",new String[] {id.toString()}); 
     MeetingList list; 
     if(cr.moveToFirst()) { 
//   cr.moveToFirst(); 
      list = new MeetingList(Integer.parseInt(cr.getString(0)), cr.getString(1), cr.getString(2), cr.getString(3), cr.getString(4), cr.getString(5), cr.getString(6), Integer.parseInt(cr.getString(7))); 
     }else{ 
      list = null; 
     } 
     return list; 
    } 
} 

我試圖插入一行到數據庫,但它總是返回-1所以當我看着日誌我看到這個錯誤

Error inserting CreationTime=Time = 13-02-2017 9 : 13 MeetingDuration=5 MeetingId=1 Flag=-1 ConferenceDescription=Thus club meeting was going to be held yesterday MeetingTime=Time = 13-02-2017 9 : 13 MeetingName=meeting 2 MeetingPresenter=Randomuser 
                       android.database.sqlite.SQLiteException: no such table: iListen (code 1): , while compiling: INSERT INTO iListen(CreationTime,MeetingDuration,MeetingId,Flag,ConferenceDescription,MeetingTime,MeetingName,MeetingPresenter) VALUES (?,?,?,?,?,?,?,?) 
                        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 

我GOOGLE了這個,發現了幾個帖子,幾乎所有的然後建議我重新安裝應用程序,所以我卸載並重新安裝它,我得到同樣的錯誤。然後,我嘗試了一些可能性,並得出結論:`Create``聲明可能是錯誤的,它是,我錯過了一些逗號,所以我添加,然後再次收到同樣的錯誤。

任何想法這段代碼有什麼問題?

+1

'私有靜態最後絃樂TABLE_NAME = 「MeetingDetails」;'你的表名確實是** MeetingDetails **,而不是** iListen **。 –

+0

是否有什麼理由甚至需要數據庫名稱的最後一個字符串? –

+0

@ cricket_007我將在課堂上多次使用數據庫,因此將其聲明爲final – Tyson

回答

3

你有

db.insert(DATABASE_NAME,null,cValues); 

你的第一個參數必須是表名。更改爲

db.insert(TABLE_NAME,null,cValues); 

檢查PARAMS @https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,java.lang.String中,android.content.ContentValues)

+0

沒想到我會犯這樣的錯誤..它工作 – Tyson

+0

@Tyson,但你應該檢查你的日誌清楚**沒有這樣的表:iListen ** – Raghunandan

+0

我沒有想到,我會給予錯誤的字符串,我一遍又一遍地檢查查詢,並確信創建查詢出了問題,所以沒有注意到我正在寫入什麼表 – Tyson