我在SQLite数据库的两个表table1和table2上使用INNER JOIN。 如何从光标访问结果(两个表的列)?这两个表有两列同名。
String query = SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
Cursor c = newDB.rawQuery(query, null);
答案 0 :(得分:5)
您可以指定列名而不是使用“*”。
String query = SELECT table1.id AS ID,table2.column2 AS c2,...... FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
然后使用列名ID,c2等进行访问。
while (cursor.moveToNext()) {
String c2 = cursor.getString(cursor.getColumnIndex("c2"));
int id = cursor.getInt(cursor.getColumnIndex("ID"));
..............
.............
}
编辑损坏的链接:在此检查rawQuery methid http://www.vogella.com/tutorials/AndroidSQLite/article.html 和http://www.codota.com/android/methods/android.database.sqlite.SQLiteDatabase/rawQuery这里有不同的例子
答案 1 :(得分:2)
Cursor c=databseobject.functionname() //where query is used
if(c.movetofirst()) {
do {
c.getString(columnindex);
} while(c.movetoNext());
}
答案 2 :(得分:2)
您可以像访问任何其他查询一样访问结果。 唯一的区别是有可能在两个表上命名冲突,列名相同。为了解决这些冲突,您需要使用表名作为前缀。
例如
Long id = c.getLong(c.getColumnIndex(tableName1 + "." + idColumnName));
如果这种方法不起作用。您应该按如下方式编写查询:
String query = SELECT table1.id AS table1_id FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
Cursor c = newDB.rawQuery(query, null);
另外一般说明,最好不要使用“Select * ...”,最好明确写下你想要选择的列。
答案 3 :(得分:1)
我使用以下内容进行内连接:
public Cursor innerJoin(Long tablebId) {
String query = SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
return database.rawQuery(query, null);
}
您可以将光标迭代如下:
Cursor cursor = innerJoin(tablebId); String result = ""; int index_CONTENT = cursor.getColumnIndex(KEY_CONTENT); cursor.moveToFirst(); do{ result = result + cursor.getString(index_CONTENT) + "\n"; }while(cursor.moveToNext());
希望这适合你
答案 4 :(得分:1)
如果你知道列名,那么你可以在下面找到它,
long id = cursor.getLong(cursor.getColumnIndex("_id"));
String title = cursor.getString(cursor.getColumnIndex("title"));
如果您只想查看返回游标的所有列名称,则可以使用String[] getColumnNames()方法检索所有列名称。
希望这会给你一些提示。