使用ContentValues插入FOREIGN KEY字段

时间:2016-12-01 06:16:01

标签: android sqlite android-sqlite android-contentprovider

我正在使用execSQL命令将数据插入到包含外键的表中。

这就是我目前的工作方式。

String query = "INSERT INTO "+ SunshineContract.WeatherEntry.TABLE_NAME +" ( "+
        SunshineContract.WeatherEntry.COL_LOC_KEY + ", "+
        SunshineContract.WeatherEntry.COL_WIND_SPEED+ ", "+
        SunshineContract.WeatherEntry.COL_DEGREE+ ") VALUES ((SELECT " +
        SunshineContract.LocationEntry._ID + " FROM "+ SunshineContract.LocationEntry.TABLE_NAME + " WHERE "+
        SunshineContract.LocationEntry._ID + " = 1 ), "+
       80, 98);";
sqLiteDatabaseWritable.execSQL(query);

我想使用内容提供程序将数据插入到我的数据库中。但目前,我无法使用内容提供程序插入我的数据,因为我无法为此外键字段构造内容值。

contentValue.put(SunshineContract.WeatherEntry.COL_LOC_KEY, 'SELECT " +
            SunshineContract.LocationEntry._ID + " FROM "+ SunshineContract.LocationEntry.TABLE_NAME + " WHERE "+
            SunshineContract.LocationEntry._ID + " = 1 )'

是否有任何方法可以使用ContentValues将数据插入到包含FOREIGN KEY的表中,以便我可以使用ContentResolver

1 个答案:

答案 0 :(得分:0)

ContentValues对象的重点是提供无法解释为表达式的值,以防止外来应用程序将SQL代码注入实现内容提供程序的应用程序。

这意味着您无法动态查找插入的值。 您必须先从数据库中读取值,然后将它们放入ContentValues对象(第二步有helper function)。

如果您要访问自己的数据库,请考虑根本不使用内容提供商;使用SQLiteDatabase会更灵活。