我正在构建我的第一个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
错误。
答案 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});