代码之家  ›  专栏  ›  技术社区  ›  user1846348

Android SQLite:如何使用从其他表检索的id从表中检索数据

  •  0
  • user1846348  · 技术社区  · 7 年前

    我有两张桌子

    表A

     ________________________
    |ADTMeasurement|ADTid  |
    |--------------|-----  | 
    |measurement   |1~1~3  |
    |measurement   |1~1~12 |
    |measurement   |1~1~7  |
    |measurement   |1~1~11 |
    |measurement   |1~1~99 |
    ------------------------
    

    表B

    ________________________________
    |ADTName     |ADTid  |ADTType  |
    |------------|-------|---------|
    |ADTName_1   |1~1~3  |DTType_1 |
    |ADTName_2   |1~1~12 |DTType_2 |
    |ADTName_4   |1~1~7  |DTType_3 |
    |ADTName_4   |1~1~11 |DTType_4 |
    |ADTName_5   |1~1~99 |DTType_5 |
    |ADTName_6   |1~1~10 |DTType_3 |
    |ADTName_7   |1~1~4  |DTType_4 |
    |ADTName_7   |1~1~6  |DTType_5 |
    --------------------------------
    

    如何从tableB中检索所选行;对于表A中的所有“ADTid”。我需要将结果保存在JSONarray中,以便将其发送到服务器。

    下面是我厌倦使用的代码,这是错误的。

    public Cursor getSavedMeasuremnet() {
            SQLiteDatabase db = this.getWritableDatabase();
            Cursor mCursor = db.query("SELECT * FROM TableB WHERE ADTId IN (SELECT ADTId FROM TableA WHERE ADTMeasurment = 'measurement'");
    
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
        }
    

    我收到一条错误消息-无法解析方法–query(java.lang.string)

    1 回复  |  直到 7 年前
        1
  •  0
  •   MJM    7 年前

    没有仅以字符串作为参数的查询方法,您必须在方法中传递所有参数,如下所述

    enter image description here

    public JSONArray getSavedMeasuremnet() {
            JSONArray jsonArray=new JSONArray();
    
            SQLiteDatabase db = this.getWritableDatabase();
    
            Cursor mCursor = db.rawQuery("SELECT * FROM TableB JOIN TableA ON TableA.ADTid  == TableB.ADTid where TableA.ADTMeasurement='measurement'",null)
    
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                try {
                        JSONObject jsonObject=new JSONObject();
                        jsonObject.put("ADTName",cursor.getString(cursor.getColumnIndex("ADTName")));
                        jsonObject.put("ADTid",cursor.getString(cursor.getColumnIndex("ADTid")));
                        jsonObject.put("ADTType",cursor.getString(cursor.getColumnIndex("ADTType")));
                        jsonArray.put(jsonObject);
                    }  catch (JSONException e) {
                        e.printStackTrace();
                    }
                cursor.moveToNext();
            }
            return jsonArray;
      }