Android SQLite表插入问题

时间:2014-05-17 06:25:19

标签: android sqlite android-contentprovider

我使用android内容提供程序创建了一个名为xxxx的表。我卸载了应用程序并运行然后当我尝试插入数据时,我没有找到列发现异常。我将在下面发布我的代码,

public class PMSQLGroupsMessage {
    public static final Integer version = 1;
    public static final String TABLE_NAME = "GroupMessage";

    public static final Uri CONTENT_URI = Uri.parse(PMSQLContentProvider.SCHEME
            + PMSQLContentProvider.AUTHORITY + "/" + TABLE_NAME);
    public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.hsware."
            + TABLE_NAME;
    public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.hsware."
            + TABLE_NAME;

    public static final String COL_ID = "_id";
    public static final String COL_GID = "gid";
    public static final String COL_PMID = "pmid";
    public static final String COL_READ = "read";
    public static final String COL_TYPE = "type";
    public static final String COL_DATE = "date";
    public static final String COL_MESSAGE = "_message";

    public static final String TABLE_CREATION = "CREATE TABLE IF NOT EXISTS  "
            + TABLE_NAME + " (" + COL_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_GID + " BIGINT,"
            + COL_PMID + " BIGINT," + COL_READ + " INTEGER," + COL_MESSAGE
            + "TEXT," + COL_TYPE + " INTEGER," + COL_DATE + " BIGINT);";

    Integer messageId;
    Long gid;
    Long pmid;
    Boolean read;
    Integer type;
    Date date;
    String _message;

    public Integer getMessageId() {
        return messageId;
    }

    public void setMessageId(Integer messageId) {
        this.messageId = messageId;
    }

    public Long getGid() {
        return gid;
    }

    public void setGid(Long gid) {
        this.gid = gid;
    }

    public Long getPmid() {
        return pmid;
    }

    public void setPmid(Long pmid) {
        this.pmid = pmid;
    }

    public Boolean getRead() {
        return read;
    }

    public void setRead(Boolean read) {
        this.read = read;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getMessage() {
        return _message;
    }

    public void setMessage(String message) {
        this._message = message;
    }

}

例外: -

android.database.sqlite.SQLiteException: table GroupMessage has no column named _message (code 1): , while compiling: INSERT INTO GroupMessage(gid,_message,date) VALUES (?,?,?)

CODE:

public void addGroupMessages(long groupid, String message) {

        // save in GroupMessageTable
        ContentValues cv = new ContentValues();
        cv.put(PMSQLGroupsMessage.COL_DATE, new Date().getTime());
        cv.put(PMSQLGroupsMessage.COL_GID, groupid);
        cv.put(PMSQLGroupsMessage.COL_MESSAGE, message);

        cr.insert(PMSQLGroupsMessage.CONTENT_URI, cv);

    }

3 个答案:

答案 0 :(得分:1)

CREATE TABLE中,您的{39}错过COL_MESSAGE及其类型TEXT之间的空格。

修复后,您可能需要卸载应用程序,以便删除旧的数据库文件。

答案 1 :(得分:1)

替换此查询:

public static final String TABLE_CREATION = "CREATE TABLE IF NOT EXISTS  "
            + TABLE_NAME + " (" + COL_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_GID + " BIGINT,"
            + COL_PMID + " BIGINT," + COL_READ + " INTEGER," + COL_MESSAGE
            + "TEXT," + COL_TYPE + " INTEGER," + COL_DATE + " BIGINT);";

用这个:

public static final String TABLE_CREATION = "CREATE TABLE IF NOT EXISTS  "
            + TABLE_NAME + " (" + COL_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_GID + " BIGINT,"
            + COL_PMID + " BIGINT," + COL_READ + " INTEGER," + COL_MESSAGE
            + " TEXT," + COL_TYPE + " INTEGER," + COL_DATE + " BIGINT);";

注意:您在TEXT前面缺少空间。

答案 2 :(得分:1)

使用此:

public static final String TABLE_CREATION = "CREATE TABLE IF NOT EXISTS  "
        + TABLE_NAME + " (" + COL_ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_GID + " BIGINT,"
        + COL_PMID + " BIGINT," + COL_READ + " INTEGER," + COL_MESSAGE
        + " TEXT," + COL_TYPE + " INTEGER," + COL_DATE + " BIGINT);";