Android SQLITE:根据列值获取ID值

时间:2019-04-19 19:44:54

标签: android sqlite

我正在构建我的第一个android应用程序,试图将mysql数据同步到android中的sqlite。我在mysql中有两个表,并且两个表都已正确同步到android sqlite中。第一个表如下:

id ProjectName
1  RA_Tesco
2  RA_Coors
3  RA_JWNT

第二张表如下:

id pid Outlet Add1
1   1   Tesco  XYZ
2   1   Tesco  ABC
3   2   Coors  NBC

第二个表中的PID引用第一个表的ID。如何根据从第一个表的ID派生的PID值对第二个表进行子集化。我知道它在php或mysql中甚至在Python或R中都非常简单。但是,在Android中基于字符串获取id并在第二张表中引用相同的ID似乎很棘手。到目前为止,我的代码:

sqLiteDatabase = sqLiteHelper.getWritableDatabase();
clickedId = getIntent().getExtras().get("clickedId").toString(); 

当我敬酒clickedId时,我得到正确的字符串,例如RA_Tesco

cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+SQLiteHelper.TABLE_NAME1+" where pid = 1"+"", null);

上面的代码还从sqlite表中呈现了正确的记录集。我正在努力将两者融合在一起。我尝试了以下方法:

String pid;
sqLiteDatabase = sqLiteHelper.getWritableDatabase();
clickedId = getIntent().getExtras().get("clickedId").toString();
pid = sqLiteDatabase.rawQuery( "select id from "+sqLiteHelper.TABLE_NAME+" where projectName = "+clickedId+"", null );

我遇到incompatible types错误。

3 个答案:

答案 0 :(得分:1)

这对我有用:

clickedId = getIntent().getExtras().get("clickedId").toString();
cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+SQLiteHelper.TABLE_NAME1+" where pid = (select id from "+SQLiteHelper.TABLE_NAME+ " where ProjectName = '"+clickedId+"'"+")", null);

我刚刚遵循了嵌套查询的相同MySQL原则。上面的代码大致如下:

select * from table2 where pid = (select id from table1 where projectname="xyz");

答案 1 :(得分:0)

1)尝试将查询单引号

2)rawQuery返回Cursor,而不是String

所以

Cursor pidCursor = sqLiteDatabase.rawQuery( "select id from "+sqLiteHelper.TABLE_NAME+" where projectName = '"+clickedId+"'", null );

答案 2 :(得分:0)

如果您想从第二个表中获取相应的行,则将ProjectName的值作为参数传递给我(我猜它是clickedId,尽管它的名称是id?),请创建一个这样的声明:

String sql = 
    "select t2.* from " + SQLiteHelper.TABLE_NAME1 + 
    " t2 inner join " + SQLiteHelper.TABLE_NAME + 
    " t1 on t1.id = t2.pid where t1.ProjectName = ?"; 

这将连接两个表并返回第二个表的所有列。
通过传递rawQuery()作为参数来执行clickedId,这是避免sql注入的正确方法:

Cursor cursor = sqLiteDatabase.rawQuery(sql, new String[] {clickedId});