SQLite列未创建

时间:2015-04-06 23:37:03

标签: android sql database sqlite

好的,所以我不知道问题是什么。我收到一条错误消息,指出sender_id列不存在。我有两个表,用户表创建得很好,所有列名都是常量。

  public String CREATE_USER_TABLE = "CREATE TABLE " + TableData.TableInfo.USER_TABLE +
        " ( "+ TableData.TableInfo.USER_NAME +" TEXT PRIMARY KEY, "
             + TableData.TableInfo.USER_PASS +" TEXT, "
             + TableData.TableInfo.USER_FNAME + " TEXT, "
             + TableData.TableInfo.USER_LNAME + " TEXT);";
//Create Message table
public String CREATE_MSG_TABLE = "CREATE TABLE " + TableData.TableInfo.MSG_TABLE +
        " ( " + TableData.TableInfo.MESSAGE_ID + " INTEGER PRIMARY KEY, "
        + TableData.TableInfo.RECEIVER_ID + " TEXT, "
        + TableData.TableInfo.SENDER_ID + " TEXT, "
        + TableData.TableInfo.MESSAGE + " TEXT, "
        + TableData.TableInfo.STATUS + " INTEGER);";

用户表创建得很好,我没有问题访问信息。但是我在尝试访问消息表时遇到错误。

 public void onCreate(SQLiteDatabase sdb){
    sdb.execSQL(CREATE_USER_TABLE);
    Log.d("Database operations", "Table1 created");
    sdb.execSQL(CREATE_MSG_TABLE);
    Log.d("Database operations", "Table2 created");

}

这是我查询表以添加行的地方。

  public void putInformationMsgTable(DatabaseOperations dop,String senderID,String receiverID, String text, int status)
{
    SQLiteDatabase SQ = dop.getWritableDatabase();

    SQ.execSQL("INSERT INTO " + TableData.TableInfo.MSG_TABLE +
            " (" + TableData.TableInfo.MESSAGE_ID +
            ", " + TableData.TableInfo.RECEIVER_ID +
            ", " + TableData.TableInfo.SENDER_ID +
            ", " + TableData.TableInfo.MESSAGE +
            ", " + TableData.TableInfo.STATUS + ")" +
            " VALUES (" + null + ", "
            + receiverID + ", "
            + senderID + ", "
            + text + ", "
            + status + ")");

    Log.d("Database operations", "One row inserted into message table");
}

我知道在这个主题上有很多线索,但我的教授和我都很难过。我的语法似乎是正确的,没有理由不这样做。有什么想法吗?!

编辑:这些是我正在使用的常数 **我还将常量MESSAGE_ID的值更改为msg_id,现在错误显示“table msg_info没有名为msg_id的列(代码1)”

        //User Table
    public static final String USER_NAME = "user_name";
    public static final String USER_PASS = "user_pass";
    public static final String USER_FNAME = "user_fname";
    public static final String USER_LNAME = "user_lname";
    public static final String DATABASE_NAME = "user_info";
    public static final String USER_TABLE = "user_info";

    //Message Table
    public static final String MESSAGE_ID = "rowid";
    public static final String RECEIVER_ID = "receiver_id";
    public static final String SENDER_ID = "sender_id";
    public static final String MESSAGE = "message";
    public static final String STATUS = "status";
    public static final String MSG_TABLE = "msg_info";

1 个答案:

答案 0 :(得分:2)

rowid不能是有效的列名

就像在编程中使用 if 变量一样。我们不能使用它,因为它是一个保留关键字。 这个词已被保留。

请参阅here

解决方案将使用 row_id 之类的内容作为MESSAGE_ID