[英]What is the way to insert a huge JSON data into a SQLite DB in android
我有一個大的json請求,也就是說,它有大約50k行,有15列,我必須插入到具有相同結構的SQLite DB中。 這是,我必須將postgres db中分配的相同數據復制到我的應用程序中的sqlite數據庫中。 有沒有一種有效的方法呢? 是否有一些api或某些東西可以幫助工作?
我必須告訴我,我可以使用不大的JSON數據來處理OMRLite,但是當我嘗試使用更大的數據時,我的應用程序崩潰並出現內存不足錯誤 。
如果你有一些我可以遵循的想法或一些例子,我將非常感激! 提前致謝!
因為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;
}
希望您了解問題所在並希望您幫助我! 再次感謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.