Каков способ вставки огромных данных JSON в SQLite DB в андроид

У меня большой запрос json, то есть он содержит около 50 тыс. Строк с 15 столбцами, которые мне нужно вставить в SQLite DB с той же структурой. Это, я должен скопировать те же данные, выделенные в postgres db, в мой sqlite db в моем приложении. Есть ли эффективный способ сделать это? Есть ли какая-то апи или что-то, что могло бы помочь работе?

Я должен сказать, что я могу сделать с OMRLite с данными JSON, которые невелики, но когда я пытаюсь сделать это с большими, у меня возникают сбои в работе приложения и ошибка в памяти .

Пожалуйста, если у вас есть какая-то идея или какой-то пример, за которым я мог бы следовать, я буду очень благодарен! заранее спасибо!

Вы также можете использовать официальную библиотеку GSS Streaming от Google.

Gson Streaming: Gson Streaming

JsonReader играет очень важную роль для анализа json с помощью библиотеки Streaming.

Поскольку JSON настолько велик, вы не можете полностью загрузить его в память. Даже использование стандартного JSONObject приведет к нехватке памяти на многих устройствах.

То, что я делал в подобной ситуации, это использовать Джексона для его разбора. Джексон может сделать это из потока, поэтому использование памяти не является проблемой вообще. Недостатком является API, который не так просто использовать по сравнению с обычными параметрами.

Вот пример, который я нашел: Jackson Streaming

Поток GSON работает для меня Gson – потоковая передача, но я должен сказать, что это занимает свое время, около 4 минут для 68K строк с 10 столбцами, например. Но все равно решает мою проблему. Поэтому у меня есть ответ JSON:

 - preciosArtPK: { codLista: 1, codArticulo: 11348, cansiVenta: 1, fecVigencia: 1435781252000 }, siglaVenta: "UN", precioVenta: 0, margenPct: 100, codUsuario: 1, vigente: "S", nomModulo: "MIGRACION" 

Выше JSON является частью ответа массива, но у меня есть эти «preciosArtPK» для включения в сериализацию с помощью gson. Как я могу это сделать? У меня есть класс, который обрабатывает мою сериализацию:

 @DatabaseTable(tableName = "preciosart") public class PreciosArt { public static final String PRECIOS_COD_LISTA = "_id"; public static final String PRECIOS_COD_ARTICULO = "cod_articulo"; public static final String PRECIOS_CANSI_VENTA = "cansi_venta"; public static final String PRECIOS_FEC_VIGENCIA = "fec_vigencia"; public static final String PRECIOS_SIGLA_VENTA = "sigla_venta"; public static final String PRECIOS_PRECIO_VENTA = "precio_venta"; public static final String PRECIOS_MARGEN_PCT = "margen_pct"; public static final String PRECIOS_COD_USUARIO = "cod_usuario"; public static final String PRECIOS_VIGENTE = "vigente"; public static final String PRECIOS_NOM_MODULO = "nom_modulo"; @DatabaseField(id = true, unique = true, columnName = PRECIOS_COD_LISTA) private Integer codLista; @DatabaseField(unique = true, columnName = PRECIOS_COD_ARTICULO) @SerializedName("codArticulo") // probar private Integer codArticulo; @DatabaseField(unique = true, columnName = PRECIOS_CANSI_VENTA) private Integer cansiVenta; @DatabaseField(unique = true, columnName = PRECIOS_FEC_VIGENCIA) private Long fecVigencia; @DatabaseField(columnName = PRECIOS_SIGLA_VENTA) @SerializedName("siglaVenta") private String siglaVenta; @DatabaseField(columnName = PRECIOS_PRECIO_VENTA) @SerializedName("precioVenta") private Double precioVenta; @DatabaseField(columnName = PRECIOS_MARGEN_PCT) @SerializedName("margenPct") private Float margenPct; @DatabaseField(columnName = PRECIOS_COD_USUARIO) @SerializedName("codUsuario") private Integer codUsuario; @DatabaseField(columnName = PRECIOS_VIGENTE) @SerializedName("vigente") private String vigente; @DatabaseField(columnName = PRECIOS_NOM_MODULO) @SerializedName("nomModulo") private String nomModulo; 

Но это не заполняет эти поля (codArticulo, cansiVenta и fecVigencia). Я читал о десериализации этих json-форматов, создающих еще один класс, поэтому я сделал то же самое:

 @SerializedName("codLista") private Integer codLista; @SerializedName("codArticulo") private Integer codArticulo; @SerializedName("cansiVenta") private Integer cansiVenta; @SerializedName("fecVigencia") private Long fecVigencia; 

Проблема в том, как я могу заполнить эти поля моим десериализованным json? Я использую OMRLite для выполнения этой работы, этот класс предназначен для этой цели:

 public long updatePreciosart(PreciosArt preciosArt){ long resultUpdate = -1; try { getHelper().getPreciosartDao().createOrUpdate(preciosArt); resultUpdate = 0; } catch (SQLException e) { e.printStackTrace(); resultUpdate = -1; } return resultUpdate; } 

Надеюсь, вы понимаете, в чем проблема, и надеюсь, что вы мне поможете! еще раз спасибо!