Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalArgumentException:column';foo';android不存在_Java_Android_Sqlite - Fatal编程技术网

java.lang.IllegalArgumentException:column';foo';android不存在

java.lang.IllegalArgumentException:column';foo';android不存在,java,android,sqlite,Java,Android,Sqlite,许多StackOverflow问题与此类似,但这不是查询字符串中的间距不正确的问题。我有两个表,一个用于对等方,另一个用于消息,其中外键与对等表中的ID关联 以下是我的创建字符串: private static final String DATABASE_CREATE = "CREATE TABLE " + PEER_TABLE + " (" + PeerContract._ID + " INTEGER PRIMARY KEY, " + PeerContra

许多StackOverflow问题与此类似,但这不是查询字符串中的间距不正确的问题。我有两个表,一个用于对等方,另一个用于消息,其中外键与对等表中的ID关联

以下是我的创建字符串:

private static final String DATABASE_CREATE = "CREATE TABLE " + PEER_TABLE + " ("
        + PeerContract._ID    + " INTEGER PRIMARY KEY, "
        + PeerContract.NAME + " TEXT NOT NULL, "
        + PeerContract.ADDRESS  + " TEXT NOT NULL, "
        + PeerContract.PORT + " TEXT NOT NULL);";

private static final String MESSAGE_TABLE_CREATE = "CREATE TABLE " + MESSAGE_TABLE + " ("
        + MessageContract._ID + " INTEGER PRIMARY KEY, "
        + MessageContract.MESSAGE_TEXT  + " TEXT NOT NULL, "
        + MessageContract.SENDER + " TEXT NOT NULL, "
        + MessageContract.PEER_FOREIGN_KEY + " INTEGER NOT NULL, "
        + "FOREIGN KEY ("+ MessageContract.PEER_FOREIGN_KEY+") " +
        "REFERENCES "+PEER_TABLE+"("+PeerContract._ID+") ON DELETE CASCADE);";
private static final String CREATE_INDEX =  "CREATE INDEX " + INDEX + " ON " +
        MESSAGE_TABLE + "(" + MessageContract.PEER_FOREIGN_KEY + ");";
我想查询所有已接收邮件的列表,因此我执行了以下操作:

public Cursor fetchAllMessages(){
    String query = "SELECT " + MESSAGE_TABLE + "." + MessageContract._ID + ", "
            + MessageContract.MESSAGE_TEXT + ", "
            + MessageContract.SENDER
            + " FROM " + MESSAGE_TABLE + " JOIN " + PEER_TABLE + " ON "
            + MESSAGE_TABLE + "." + MessageContract.PEER_FOREIGN_KEY
            + "=" + PEER_TABLE + "." + PeerContract._ID;
    return db.rawQuery(query, null);
}
这对我来说很有意义。到目前为止,间距还可以,没有误差

在我的主要活动中,我有一个SimpleCorsorAdapter:

   listView = (ListView) findViewById(R.id.msgList);
    dbAdapter = new ServerDbAdapter(this);
    dbAdapter.open();
    String[] from = new String[] {PeerContract.NAME, MessageContract.MESSAGE_TEXT};
    int[] to = new int[] {android.R.id.text1, android.R.id.text2};
    cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from, to);
    listView.setAdapter(cursorAdapter);
    cursor = dbAdapter.fetchAllMessages();
    cursorAdapter.swapCursor(cursor);
我得到“列'名称'不存在”,这让我发疯!
我在数据库中正确地将其定义为PeerContract.NAME。我猜这是因为fetchAllMessages发生的,但我不确定如何修复它。

您没有在
fetchAllMessages()
方法中选择
PeerContract.NAME,MessageContract.MESSAGE\u TEXT
。将其更改为:

public Cursor fetchAllMessages(){
    String query = "SELECT " + MESSAGE_TABLE + "." + MessageContract._ID + ", "
            + MessageContract.MESSAGE_TEXT + ", "
            + PeerContract.NAME + ", "
            + PeerContract.MESSAGE_TEXT + ", "
            + MessageContract.SENDER 
            + " FROM " + MESSAGE_TABLE + " JOIN " + PEER_TABLE + " ON "
            + MESSAGE_TABLE + "." + MessageContract.PEER_FOREIGN_KEY
            + "=" + PEER_TABLE + "." + PeerContract._ID;
    return db.rawQuery(query, null);
}

成功了!!!现在说得通了,但我坚持了好几个小时。正如您所知,我对sqlite仍然非常陌生。你是个圣人,很高兴我能帮你!每个人都曾经是初学者:)学习愉快!