android错误中的SQLite数据库

时间:2016-05-12 13:28:59

标签: android sqlite android-sqlite sqliteopenhelper

我正在开发一个存储主题和讲座数据的应用程序。我在app.insertion主题已经完成了一个严重的问题但由于sqlite错误我无法插入讲座。

这是合约类代码

public class TimeTableContract {

public static abstract class SubjectInfo {
    public static final String TABLE_NAME_SUBJECT="subject_info";

    public static final String SUBJECT_NAME="subject_name";
    public static final String TEACHER_NAME="teacher_name";
}

public static abstract class LectureInfo {
    public static final String TABLE_NAME_LECTURE="lecture_info";

    public static final String DAY_NAME="day_name";
    public static final String SUBJECT_NAME="subject_name";
    public static final String START_HOUR="start_hour";
    public static final String START_MINUTE="start_minute";
    public static final String END_HOUR="end_hour";
    public static final String END_MINUTE="end_minute";
    public static final String ROOM_NO="room_no";
}}

以下是DBHelper类的代码

public class SubjectDbHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME="TIME_TABLE";
private static final int DATABASE_VERSION=1;
private static final String CREATE_QUERY_SUBJECT="CREATE TABLE IF NOT EXISTS "+TimeTableContract.SubjectInfo.TABLE_NAME_SUBJECT+"("+TimeTableContract.SubjectInfo.SUBJECT_NAME+
        " TEXT,"+TimeTableContract.SubjectInfo.TEACHER_NAME+" TEXT);";

private static final String CREATE_QUERY_LECTURE="CREATE TABLE IF NOT EXISTS "+ TimeTableContract.LectureInfo.TABLE_NAME_LECTURE+ "("+
        TimeTableContract.LectureInfo.DAY_NAME + " TEXT," +
        TimeTableContract.LectureInfo.SUBJECT_NAME +" TEXT," +
        TimeTableContract.LectureInfo.START_HOUR +" INTEGER," +
        TimeTableContract.LectureInfo.START_MINUTE +" INTEGER," +
        TimeTableContract.LectureInfo.END_HOUR +" INTEGER," +
        TimeTableContract.LectureInfo.END_MINUTE +" INTEGER," +
        TimeTableContract.LectureInfo.ROOM_NO +" TEXT);";


public SubjectDbHelper(Context context)
{
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_QUERY_SUBJECT);
    db.execSQL(CREATE_QUERY_LECTURE);
    Log.d("DATABASE", "Subject table created");
}
public void addSubject(String subname,String teachername,SQLiteDatabase db_sub)
{
    ContentValues contentValues_sub=new ContentValues();
    contentValues_sub.put(TimeTableContract.SubjectInfo.SUBJECT_NAME,subname);
    contentValues_sub.put(TimeTableContract.SubjectInfo.TEACHER_NAME, teachername);
    db_sub.insert(TimeTableContract.SubjectInfo.TABLE_NAME_SUBJECT, null, contentValues_sub);
    Log.d("DATABASE", "1 row inserted");
}

public void addLecture(String dName,String sName,int sHour,int sMin,int eHour,int eMin,String room_no,SQLiteDatabase db_lec)
{
    ContentValues contentValues_lec=new ContentValues();
    contentValues_lec.put(TimeTableContract.LectureInfo.DAY_NAME,dName);
    contentValues_lec.put(TimeTableContract.LectureInfo.SUBJECT_NAME,sName);
    contentValues_lec.put(TimeTableContract.LectureInfo.START_HOUR,sHour);
    contentValues_lec.put(TimeTableContract.LectureInfo.START_MINUTE,sMin);
    contentValues_lec.put(TimeTableContract.LectureInfo.END_HOUR,eHour);
    contentValues_lec.put(TimeTableContract.LectureInfo.END_MINUTE,eMin);
    contentValues_lec.put(TimeTableContract.LectureInfo.ROOM_NO,room_no);
    db_lec.insert(TimeTableContract.LectureInfo.TABLE_NAME_LECTURE,null,contentValues_lec);
    Log.d("DATABASE","lecture inserted");
}

    @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE IF EXISTS "+ TimeTableContract.SubjectInfo.TABLE_NAME_SUBJECT);
    db.execSQL("DROP TABLE IF EXISTS "+ TimeTableContract.LectureInfo.TABLE_NAME_LECTURE);
    onCreate(db);
}} 

最后是addLecture类的代码

public class addLecture extends AppCompatActivity implements AdapterView.OnItemSelectedListener{

TimeTableContract timeTableContract;
Context context=this;
SQLiteDatabase sqLiteDatabase_lec;
public void Lecture(View view)
{
    if(view.getId()==R.id.btn_cancel) {
        finish();
    }
    else if(view.getId()==R.id.btn_save)
    {
        int start_h=shour;
        int start_min=sminute;
        int end_h=ehour;
        int end_min=eminute;
        String room_no=edit_room_no.getText().toString();

        SubjectDbHelper subjectDbHelper_lec = new SubjectDbHelper(context);
        sqLiteDatabase_lec = subjectDbHelper_lec.getWritableDatabase();
        subjectDbHelper_lec.addLecture(spinner_item_day,spinner_item_subject,start_h,start_min,end_h,end_min,room_no,sqLiteDatabase_lec);
        Toast.makeText(getBaseContext(),"Lecture Inserted",Toast.LENGTH_LONG).show();
        subjectDbHelper_lec.close();
        clearText();
        finish();
    }
}
public void clearText()
{
    edit_start_time.setText("");
    edit_end_time.setText("");
    edit_room_no.setText("");
}}

现在,当我尝试单击“保存”按钮时,logcat窗口显示以下消息:

05-12 08:55:59.902    1756-1756/com.example.kishan.navigation_material E/SQLiteLog﹕ (1) table lecture_info has no column named start_minute
05-12 08:55:59.912    1756-1756/com.example.kishan.navigation_material E/SQLiteDatabase﹕ Error inserting start_minute=55 subject_name=rajesh room_no=gg start_hour=8 day_name=Monday end_minute=55 end_hour=9
android.database.sqlite.SQLiteException: table lecture_info has no column named start_minute (code 1): , while compiling: INSERT INTO lecture_info(start_minute,subject_name,room_no,start_hour,day_name,end_minute,end_hour) VALUES (?,?,?,?,?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
        at com.example.kishan.navigation_material.SubjectDbHelper.addLecture(SubjectDbHelper.java:63)
        at com.example.kishan.navigation_material.addLecture.Lecture(addLecture.java:147)

表示它在后续行中显示错误

subjectDbHelper_lec.addLecture(spinner_item_day,spinner_item_subject,start_h,start_min,end_h,end_min,room_no,sqLiteDatabase_lec);

 db_lec.insert(TimeTableContract.LectureInfo.TABLE_NAME_LECTURE,null,contentValues_lec);

我执行了     subjectDbHelper.close();

主题插入后

是否会产生问题??

INSERT INTO lecture_info(start_minute,subject_name,room_no,start_hour,day_name,end_minute,end_hour)VALUES(?,?,?,?,?,?,?)

以上行显示的是不同于我指定的顺序列中的插入值。 请帮我找出导致此错误的问题。 任何帮助都非常感谢。 谢谢

0 个答案:

没有答案