繁体   English   中英

我在Android数据库中缺少的列在哪里?

[英]Where is my missing column in Database in android?

我是Android语言的新手。 我的SQLite数据库缺少一列,但我不在哪里。

logcat返回sqlite返回:

12-07 01:38:03.337: E/AndroidRuntime(1218): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myrecordapps/com.example.myrecordapps.Subject}: java.lang.IllegalArgumentException: column '_id' does not exist

尝试访问我的主题活动时,我无法访问它。 我在Subject中使用listView来显示我的表中所有插入的数据。 该错误告诉我是我的数据库问题。

有人可以帮忙吗?

编码如下:Subject.java

DBHandlerCourse adapter_ob;
 DBHelperCourse helper_ob;
 SQLiteDatabase db_ob;
 ListView nameList;
 Button registerBtn;
 Cursor cursor;

 @Override
 public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.subject);
      nameList = (ListView) findViewById(R.id.list);
      registerBtn = (Button) findViewById(R.id.addsubject);
      adapter_ob = new DBHandlerCourse(this);

      String[] from = { DBHelperCourse.KEY_COURSE_NAME, DBHelperCourse.KEY_COURSE_CODE, DBHelperCourse.KEY_START_TIME};
      int[] to = { R.id.coursename, R.id.coursecode, R.id.starttime };
      cursor = adapter_ob.queryName();
      @SuppressWarnings("deprecation")
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this,
        R.layout.row, cursor, from, to);
      nameList.setAdapter(cursorAdapter);
      nameList.setOnItemClickListener(new OnItemClickListener() {

       @Override
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
         long arg3) {
        // TODO Auto-generated method stub
        Bundle passdata = new Bundle();
        Cursor listCursor = (Cursor) arg0.getItemAtPosition(arg2);
        int nameId = listCursor.getInt(listCursor
          .getColumnIndex(DBHelperCourse.KEY_ID));
        Toast.makeText(getApplicationContext(),Integer.toString(nameId), 500).show();
        passdata.putInt("keyid", nameId);
        Intent passIntent = new Intent(Subject.this,
          EditCourse.class);
        passIntent.putExtras(passdata);
        startActivity(passIntent);
       }
      });
      registerBtn.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Intent registerIntent = new Intent(Subject.this,
          AddCourse.class);
        startActivity(registerIntent);
       }
      });

 }

 @SuppressWarnings("deprecation")
@Override
 public void onResume() {
  super.onResume();
  cursor.requery();

 }

DBHandlerCourse.java

 public class DBHandlerCourse {

 SQLiteDatabase database_ob;
 DBHelperCourse openHelper_ob;
 Context context;

 public DBHandlerCourse(Context c) {
 context = c;
 }

 public DBHandlerCourse opnToRead() {
 openHelper_ob = new DBHelperCourse(context,
 DBHelperCourse.DATABASE_NAME, null, DBHelperCourse.VERSION);
 database_ob = openHelper_ob.getReadableDatabase();
 return this;

 }

 public DBHandlerCourse opnToWrite() {
 openHelper_ob = new DBHelperCourse(context,
 DBHelperCourse.DATABASE_NAME, null, DBHelperCourse.VERSION);
 database_ob = openHelper_ob.getWritableDatabase();
 return this;
 }

 public void Close() {
 database_ob.close();
 }

 public long insertDetails(String courseName, String courseCode, String lecturer, String creditHour, String startTime) {
 ContentValues contentValues = new ContentValues();
 contentValues.put(DBHelperCourse.KEY_COURSE_NAME, courseName);
 contentValues.put(DBHelperCourse.KEY_COURSE_CODE, courseCode);
 contentValues.put(DBHelperCourse.KEY_LECTURER, lecturer);
 contentValues.put(DBHelperCourse.KEY_CREDIT_HOUR, creditHour);
 contentValues.put(DBHelperCourse.KEY_START_TIME, startTime);
 opnToWrite();
 long val = database_ob.insert(DBHelperCourse.TABLE_NAME, null,
 contentValues);
 Close();
 return val;

 }

 public Cursor queryName() {
 String[] cols = { DBHelperCourse.KEY_COURSE_NAME, DBHelperCourse.KEY_COURSE_CODE,   DBHelperCourse.KEY_START_TIME};
 opnToWrite();
 Cursor c = database_ob.query(DBHelperCourse.TABLE_NAME, cols, null,
 null, null, null, null);

 return c;

 }

 public Cursor queryAll(int nameId) {
 String[] cols = { DBHelperCourse.KEY_COURSE_NAME, DBHelperCourse.KEY_COURSE_CODE, DBHelperCourse.KEY_START_TIME };
 opnToWrite();
 Cursor c = database_ob.query(DBHelperCourse.TABLE_NAME, cols,
 DBHelperCourse.KEY_ID + "=" + nameId, null, null, null, null);

 return c;

 }

 public long updateldetail(int rowId, String courseName, String courseCode, String lecturer, String creditHour, String startTime) {
 ContentValues contentValues = new ContentValues();
 contentValues.put(DBHelperCourse.KEY_COURSE_NAME, courseName);
 contentValues.put(DBHelperCourse.KEY_COURSE_CODE, courseCode);
 contentValues.put(DBHelperCourse.KEY_LECTURER, lecturer);
 contentValues.put(DBHelperCourse.KEY_CREDIT_HOUR, creditHour);
 contentValues.put(DBHelperCourse.KEY_START_TIME, startTime);
 opnToWrite();
 long val = database_ob.update(DBHelperCourse.TABLE_NAME, contentValues,
 DBHelperCourse.KEY_ID + "=" + rowId, null);
 Close();
 return val;
 }

 public int deletOneRecord(int rowId) {
 // TODO Auto-generated method stub
 opnToWrite();
 int val = database_ob.delete(DBHelperCourse.TABLE_NAME,
 DBHelperCourse.KEY_ID + "=" + rowId, null);
 Close();
 return val;
 }

DBHelperCourse.java

public static final String DATABASE_NAME = "CourseDB";
public static final String TABLE_NAME = "Course";
public static final int VERSION = 5;

public static final String KEY_ID = "_id";
public static final String KEY_COURSE_NAME = "coursename";
public static final String KEY_COURSE_CODE = "coursecode";
public static final String KEY_LECTURER = "lecture";
public static final String KEY_CREDIT_HOUR = "credithour";
public static final String KEY_START_TIME = "starttime";

public static final String SCRIPT = "create table " + TABLE_NAME + " ("
+ KEY_ID + " integer primary key autoincrement, " + KEY_COURSE_NAME
+ " text not null, " + KEY_COURSE_CODE + " text not null," + KEY_LECTURER
+ " text not null, " + KEY_CREDIT_HOUR + " text not null," + KEY_START_TIME
+ " text not null );";

public DBHelperCourse(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(SCRIPT);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table " + TABLE_NAME);
onCreate(db);
}

将_id列添加到游标查询中,因为您必须为查询提供_id列,该列应提供SimpleCursorAdapter数据

String[] cols = { DBHelperCourse.KEY_ID,DBHelperCourse.KEY_COURSE_NAME, DBHelperCourse.KEY_COURSE_CODE,   DBHelperCourse.KEY_START_TIME};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM