2017-02-11 62 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