我有一个大的json请求,也就是说,它有大约50k行,有15列,我必须插入到具有相同结构的SQLite DB中。这是,我必须将postgres db中分配的相同数据复制到我的应用程序中的sqlite数据库中。有没有一种有效的方法呢?是否有一些api或其他可以帮助工作的东西?
我必须告诉我,我能够使用不大的JSON数据来处理OMRLite,但是当我尝试使用更大的数据时,我的应用程序崩溃并且 < em>内存不足错误 。
如果您有一些想法或我可以遵循的一些例子,我将非常感激!提前谢谢!
答案 0 :(得分:2)
答案 1 :(得分:1)
由于JSON太大,您无法将其完全加载到内存中。即使使用标准JSONObject也会导致许多设备的内存不足。
我在类似情况下所做的就是使用杰克逊来解析它。杰克逊可以从流中做到这一点,因此内存使用根本不是问题。缺点是API与普通选项相比,不是那么直接使用。
以下是我发现的一个例子:Jackson Streaming
答案 2 :(得分:0)
GSON流适用于我Gson - streaming,但我不得不说需要花费他的时间,例如,对于68K行,例如10列,大约需要4分钟。但无论如何解决了我的问题。所以我有这个JSON回复:
- preciosArtPK: {
codLista: 1,
codArticulo: 11348,
cansiVenta: 1,
fecVigencia: 1435781252000
},
siglaVenta: "UN",
precioVenta: 0,
margenPct: 100,
codUsuario: 1,
vigente: "S",
nomModulo: "MIGRACION"
以上JSON是数组响应的一部分,但我有那些&#34; preciosArtPK&#34;用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;
}
希望您了解问题所在并希望您帮助我!再次感谢!