【问题标题】:Using ContentValues to insert in FOREIGN KEY field使用 ContentValues 在 FOREIGN KEY 字段中插入
【发布时间】:2017-04-15 16:30:03
【问题描述】:

我正在使用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 将数据插入到包含外键的表中,以便我可以使用ContentResolver

【问题讨论】:

  • 在大多数情况下,数据将来自 web api(json 或 xml),您必须将该 json 解析为一些 java 数据对象。然后,您只需在插入表时将此 java 数据对象的属性作为 ContentValue 放置。您能否详细解释一下您的问题的背景故事?

标签: android sqlite android-sqlite android-contentprovider


【解决方案1】:

ContentValues 对象的全部意义在于提供不能被解释为表达式的值,以防止外国应用程序将 SQL 代码注入实现内容提供程序的应用程序。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多