【问题标题】:Added columns to SQLiteDatabase, can no longer read from it向 SQLiteDatabase 添加列,无法再从中读取
【发布时间】:2017-11-21 12:42:31
【问题描述】:

我的 SQLiteDatabase 工作正常,只有 3 个条目,即 UUID、标题和日期,但自从我添加了更多列后,我收到了这个错误。

不确定它是什么,我读过 0,-1 表示该列无法读取,但我确保正确拼写所有列名。

CrimeCursorWrapper.java

public List<Crime> getCrimes() {
        List<Crime> crimes = new ArrayList<>();
        CrimeCursorWrapper cursor = queryCrimes(null, null);
        try {
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                crimes.add(cursor.getCrime());
                cursor.moveToNext();
            }
        } finally{
            cursor.close();
        }
        return crimes;
    }

犯罪实验室.java:

public Crime getCrime(UUID id) {
        CrimeCursorWrapper cursor = queryCrimes(
                CrimeTable.Cols.UUID + " = ?",
                new String[] { id.toString() }
        );
        try {
            if (cursor.getCount() == 0) {
                return null;
            }
            cursor.moveToFirst();
            return cursor.getCrime();
        } finally {
            cursor.close();
        }
    }

private static ContentValues getContentValues(Crime crime) {
        ContentValues values = new ContentValues();
        values.put(CrimeTable.Cols.UUID, crime.getId().toString());
        values.put(CrimeTable.Cols.TITLE, crime.getTitle());
        values.put(CrimeTable.Cols.DATE, crime.getDate().getTime());
        values.put(CrimeTable.Cols.ACTTYPE, crime.getActType().toString());
        values.put(CrimeTable.Cols.PLACE, crime.getPlace().toString());
        values.put(CrimeTable.Cols.DURATION, crime.getDuration().toString());
        values.put(CrimeTable.Cols.COMMENT, crime.getComment().toString());
        return values;
    }

    private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs) {
        Cursor cursor = mDatabase.query(
                CrimeTable.NAME,
                null, // Columns - null selects all columns
                whereClause,
                whereArgs,
                null, // groupBy
                null, // having
                null // orderBy
        );
        return new CrimeCursorWrapper(cursor);
    }

CrimeCursorWrapper.java:

public class CrimeCursorWrapper extends CursorWrapper{

    public CrimeCursorWrapper(Cursor cursor) {
        super(cursor);
    }

    public Crime getCrime() {
        String uuidString = getString(getColumnIndex(CrimeTable.Cols.UUID));
        String title = getString(getColumnIndex(CrimeTable.Cols.TITLE));
        long date = getLong(getColumnIndex(CrimeTable.Cols.DATE));
        String actType = getString(getColumnIndex(CrimeTable.Cols.ACTTYPE));
        String place = getString(getColumnIndex(CrimeTable.Cols.PLACE));
        String duration = getString(getColumnIndex(CrimeTable.Cols.DURATION));
        String comment = getString(getColumnIndex(CrimeTable.Cols.COMMENT));


        Crime crime = new Crime(UUID.fromString(uuidString));

        crime.setTitle(title);
        crime.setDate(new Date(date));
        crime.setActType(actType);
        crime.setPlace(place);
        crime.setDuration(duration);
        crime.setComment(comment);

        return crime;
    }

}

犯罪.java:

public class Crime {

    private UUID mId;
    private String mTitle;
    private Date mDate;
    private String mActType;
    private String mPlace;
    private String mDuration;
    private String mComment;


    public Crime() {
        this(UUID.randomUUID());
    }

    public Crime(UUID id) {
        mId = id;
        mDate = new Date();
    }

    public UUID getId() {
        return mId;
    }
    public String getTitle() {
        return mTitle;
    }
    public void setTitle(String title) {
        mTitle = title;
    }
    public Date getDate() {
        return mDate;
    }
    public void setDate(Date date) {
        mDate = date;
    }
    public String getPhotoFilename() {
        return "IMG_" + getId().toString() + ".jpg";
    }
    public String getActType() {
        return mActType;
    }
    public void setActType(String actType) {
        mActType = actType;
    }
    public String getPlace() {
        return mPlace;
    }
    public void setPlace(String place) {
        mPlace = place;
    }
    public String getDuration() {
        return mDuration;
    }
    public void setDuration(String duration) {
        mDuration = duration;
    }
    public String getComment() {
        return mComment;
    }
    public void setComment(String comment) {
        mComment = comment;
    }

}

【问题讨论】:

  • I am getting this error 什么错误?你能发布错误吗?

标签: javascript java android jquery cursor


【解决方案1】:

它“可以”是原因:如果您使用物理移动设备进行调试,则在更改代码中的数据库表后,从移动设备中删除应用程序的数据并重新安装您的 apk(或按调试或运行按钮)。 Android Studio 不会自动更新数据库文件。

【讨论】:

  • 我使用模拟器测试应用程序,我确实从菜单中卸载了应用程序,但仍然遇到同样的问题。
  • 好吧,让我们试试这个,不要卸载应用程序而是转到设置>应用程序设置>您的应用程序>存储>清除数据
【解决方案2】:

您是否在添加更多列后更改了数据库的版本?这是强制性的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多