繁体   English   中英

如果其他表中存在数据,则插入表中

[英]Insert into table if data is exist in other table

我使用sqlite在我的android应用中记录数据。 我有表AP和读数。 我希望仅在表AP中存在数据时才将数据插入表读数中。

我的输出现在是这样的:

[{"building_id":"test",
"readings":[{"name":"B","routers":{"b4:e9:b0:58:24:80":"@wifi.id","5a:e3:47:cd:34:87":"yeygygegehe","8c:e1:17:9e:21:ec":"UKM CENTER","54:78:1a:f3:24:80":"@wifi.id","54:78:1a:f3:24:82":"seamless@wifi.id","50:c7:bf:6e:ed:35":"Teh Sosro","30:0c:23:c8:6d:ac":"","74:b5:7e:f8:23:64":"Intra Kentungan","50:06:04:7a:68:b0":"@wifi.id","40:ee:dd:7a:f1:68":"Mediapro Banteng","9c:ad:97:36:b4:57":"DESKTOP-R93MVG7 6315","10:c1:72:f3:1c:e4":"CHATUCHA","b4:e9:b0:58:24:82":"seamless@wifi.id","50:64:2b:8b:c7:4c":"Logitech","50:06:04:7a:68:b2":"seamless@wifi.id","b4:75:0e:dd:97:5e":"CLEON @AP LT2 UTARA"},
"values":{"b4:e9:b0:58:24:80":-47,"5a:e3:47:cd:34:87":-41,"8c:e1:17:9e:21:ec":-61,"54:78:1a:f3:24:80":-56,"54:78:1a:f3:24:82":-55,"50:c7:bf:6e:ed:35":-73,"30:0c:23:c8:6d:ac":-50,"74:b5:7e:f8:23:64":-69,"50:06:04:7a:68:b0":-35,"40:ee:dd:7a:f1:68":-79,"9c:ad:97:36:b4:57":-31,"10:c1:72:f3:1c:e4":-79,"b4:e9:b0:58:24:82":-47,"50:64:2b:8b:c7:4c":-54,"50:06:04:7a:68:b2":-35,"b4:75:0e:dd:97:5e":-78}},
"friendly_wifis":[{"BSSID":"9c:ad:97:36:b4:57","SSID":"DESKTOP-R93MVG7 6315"},{"BSSID":"50:06:04:7a:68:b2","SSID":"seamless@wifi.id"},{"BSSID":"5a:e3:47:cd:34:87","SSID":"yeygygegehe"}]}]

我希望它像这样:

[{"building_id":"test",
"readings":[{"name":"B","routers":{"5a:e3:47:cd:34:87":"yeygygegehe","54:78:1a:f3:24:82":"seamless@wifi.id","9c:ad:97:36:b4:57":"DESKTOP-R93MVG7 6315"},
"values":{"5a:e3:47:cd:34:87":-41,"54:78:1a:f3:24:82":-55,"9c:ad:97:36:b4:57":-31}},
"friendly_wifis":[{"BSSID":"9c:ad:97:36:b4:57","SSID":"DESKTOP-R93MVG7 6315"},{"BSSID":"50:06:04:7a:68:b2","SSID":"seamless@wifi.id"},{"BSSID":"5a:e3:47:cd:34:87","SSID":"yeygygegehe"}]}]

读数是读数表,friendly_wifis是AP_TABLE。 如您所见,我的应用程序扫描了所有现有项目。 我希望它使用mac_id作为参数仅保存与AP_TABLE中的数据匹配的数据。

我正在尝试添加dataExist来检查:

public boolean dataExists(String id) {
        SQLiteDatabase db = this.getReadableDatabase();
        String Query = "SELECT * FROM " + AP_TABLE + " WHERE " + "ssid ='" + id+"'";
        Cursor cursor = db.rawQuery(Query, null);
        if(cursor.getCount() <= 0){
            cursor.close();
            return false;
        }
        cursor.close();
        return true;
    }

这是添加部分

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String READINGS_CREATE = "CREATE TABLE 'readings' ('building_id' TEXT NOT NULL , "
            + "'position_id' TEXT NOT NULL , 'x' FLOAT NOT NULL, 'y' FLOAT NOT NULL, "
            + " 'ssid' TEXT NOT NULL , 'mac_id' TEXT NOT NULL , 'rssi' INTEGER NOT NULL )";

    public ArrayList<String> getPositions(String building_id) {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("select distinct position_id from "
                        + READINGS_TABLE + " where building_id=?",
                new String[] { building_id });
        ArrayList<String> result = new ArrayList<String>();
        cursor.moveToFirst();
        while (cursor.isAfterLast() == false) {
            result.add(cursor.getString(0));
            cursor.moveToNext();
        }
        return result;
    }

    public boolean addReadings(String building_id, PositionData positionData) {
        Log.v("Just Before db : ", positionData.toString());
        deleteReading(building_id, positionData.getName());

        SQLiteDatabase db = getWritableDatabase();
        for (Map.Entry<String, Integer> e : positionData.getValues().entrySet()) {
            ContentValues cv = new ContentValues();
            cv.put("building_id", building_id);
            cv.put("position_id", positionData.getName());
            cv.put("ssid",positionData.routers.get(e.getKey()));
            cv.put("mac_id",e.getKey());
            cv.put("rssi", e.getValue());
            cv.put("x", positionData.getX());
            cv.put("y", positionData.getY());
            Log.v(e.getKey(), e.getValue().toString());
            if (dataExists(e.gotKey())) {
                db.insert(READINGS_TABLE, null, cv);

        }
        System.out.println("Adding done");
        return true;

    }

我不在这里显示AP表。 该代码给我错误:

FATAL EXCEPTION: main
                  Process: com.example.indoorpositioning, PID: 32217
                  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { cmp=com.example.indoorpositioning/.Positions (has extras) }} to activity {com.example.indoorpositioning/com.example.indoorpositioning.Reference}: android.database.sqlite.SQLiteException: unrecognized token: "0c" (code 1): , while compiling: SELECT * FROM access_points WHERE mac_id=0c:98:38:7c:19:f1
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:4179)
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:4222)
                      at android.app.ActivityThread.-wrap20(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1581)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:163)
                      at android.app.ActivityThread.main(ActivityThread.java:6238)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
                   Caused by: android.database.sqlite.SQLiteException: unrecognized token: "0c" (code 1): , while compiling: SELECT * FROM access_points WHERE mac_id=0c:98:38:7c:19:f1
                      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                      at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                      at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                      at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                      at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                      at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                      at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                      at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
                      at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
                      at com.example.indoorpositioning.DatabaseHelper.dataExists(DatabaseHelper.java:138)
                      at com.example.indoorpositioning.DatabaseHelper.addReadings(DatabaseHelper.java:162)
                      at com.example.indoorpositioning.Reference.onActivityResult(Reference.java:144)
                      at android.app.Activity.dispatchActivityResult(Activity.java:7132)
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:4175)
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:4222) 
                      at android.app.ActivityThread.-wrap20(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1581) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:163) 
                      at android.app.ActivityThread.main(ActivityThread.java:6238) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 

尝试这个

   "CREATE TABLE readings " + "(building_id TEXT NOT NULL , 
                + position_id TEXT NOT NULL , x FLOAT NOT NULL, y FLOAT NOT NULL, 
                +  ssid TEXT NOT NULL , mac_id TEXT NOT NULL , rssi INTEGER NOT NULL)";

编辑

  String Query = "SELECT * FROM " + AP_TABLE + " WHERE " + "mac_id ='" + id+"'";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM