java.lang.IllegalArgumentException:column';foo';android不存在
许多StackOverflow问题与此类似,但这不是查询字符串中的间距不正确的问题。我有两个表,一个用于对等方,另一个用于消息,其中外键与对等表中的ID关联 以下是我的创建字符串: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
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仍然非常陌生。你是个圣人,很高兴我能帮你!每个人都曾经是初学者:)学习愉快!