我尝试使用ORMLite在SQLite中插入值。当我尝试执行createOrUpdate
执行时,不会抛出任何异常,但值不会插入SQLite中。
我怎么解决?
实体
@DatabaseTable(tableName = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@DatabaseField(generatedId = true)
private Integer id;
@DatabaseField
private Integer pessoa_id;
@DatabaseField
private Integer id_vinculo;
@DatabaseField
private String nome;
@DatabaseField
private String telefone;
//gets and sets
@DatabaseTable(tableName = "venda")
public class Venda implements Serializable {
private static final long serialVersionUID = 1L;
@DatabaseField(generatedId = true)
private Integer id;
@DatabaseField
private Date data;
@DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true)
private Cliente cliente;
@ForeignCollectionField(eager = true)
private Collection<ItensVenda> itens = new ArrayList<ItensVenda>();
@DatabaseField
private Integer status;
@DatabaseTable(tableName = "produto")
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@DatabaseField(generatedId = true)
private Integer id;
@DatabaseField
private String nome;
@DatabaseField
private String descricao;
@DatabaseField
private Integer quantidade;
@DatabaseField
private BigDecimal preco_venda;
@DatabaseField
private BigDecimal preco_compra;
@DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true)
private ItensVenda item;
@DatabaseTable(tableName = "itensvenda")
public class ItensVenda implements Serializable {
private static final long serialVersionUID = 1L;
@DatabaseField(generatedId = true)
private Integer id;
@DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true)
private Venda venda;
@ForeignCollectionField(eager = false)
private Collection<Produto> produtos = new ArrayList<Produto>();
@DatabaseField
private Integer quantidade;
@DatabaseField
private Integer brinde;
@DatabaseField
private Integer entregaFutura;
OrmLiteSqliteOpenHelper
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
public static final String databaseName = "kontrole.db";
private static final Integer databaseVersion = 3;
public DatabaseHelper(Context context) {
super(context, databaseName, null, databaseVersion);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Venda.class);
TableUtils.createTable(connectionSource, ItensVenda.class);
TableUtils.createTable(connectionSource, Produto.class);
TableUtils.createTable(connectionSource, Cliente.class);
} catch (SQLException e) {
Log.e("SQLException->", e.getLocalizedMessage());
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, Produto.class, true);
TableUtils.dropTable(connectionSource, ItensVenda.class, true);
TableUtils.createTable(connectionSource, Produto.class);
TableUtils.createTable(connectionSource, Cliente.class);
onCreate(sqLiteDatabase, connectionSource);
} catch (SQLException e) {
Log.e("SQLException->", e.getLocalizedMessage());
}
}
@Override
public void close() {
super.close();
}
}
DAO
public class ClienteSQLiteDAO extends BaseDaoImpl<Cliente, Integer> {
public ClienteSQLiteDAO(ConnectionSource connectionSource) throws SQLException {
super(Cliente.class);
setConnectionSource(connectionSource);
initialize();
}
}
public class ProdutoSQLiteDAO extends BaseDaoImpl<Produto, Integer> {
public ProdutoSQLiteDAO(ConnectionSource connectionSource) throws SQLException {
super(Produto.class);
setConnectionSource(connectionSource);
initialize();
}
}
public class VendaSQLiteDAO extends BaseDaoImpl<Venda, Integer> {
public VendaSQLiteDAO(ConnectionSource connectionSource) throws SQLException {
super(Venda.class);
setConnectionSource(connectionSource);
initialize();
}
}
public class ItemVendaSQLiteDAO extends BaseDaoImpl<ItensVenda, Integer> {
public ItemVendaSQLiteDAO(ConnectionSource connectionSource) throws SQLException {
super(ItensVenda.class);
setConnectionSource(connectionSource);
initialize();
}
}
插入
/** inicia objetos de persistencia */
private void initPersistence(){
dh = new DatabaseHelper(this.context);
try {
clienteDAO = new ClienteSQLiteDAO(dh.getConnectionSource());
produtoDAO = new ProdutoSQLiteDAO(dh.getConnectionSource());
vendaDAO = new VendaSQLiteDAO(dh.getConnectionSource());
itensVendaDAO = new ItemVendaSQLiteDAO(dh.getConnectionSource());
} catch (SQLException e) {
Log.e("ERRO SQLException Method InitPersistence", getClass().getSimpleName() + "-> " + e.getLocalizedMessage());
}
}
/** adiciona venda ao SQLite */
private void insertVenda(){
if(venda.getCliente() == null){
Toast.makeText(context, "Informe o cliente", Toast.LENGTH_SHORT).show();
}else{
try {
// insere o cliente
Dao.CreateOrUpdateStatus clienteInsert = clienteDAO.createOrUpdate(cliente);
//insere venda
Dao.CreateOrUpdateStatus vendaInsert = vendaDAO.createOrUpdate(venda);
// insere o produto
for(Produto p : itemVenda.getProdutos()){
Dao.CreateOrUpdateStatus produtoInsert = produtoDAO.createOrUpdate(p);
if(produtoInsert.isCreated()){
for(ItensVenda i : venda.getItens()){
i.addProduto(p);
i.setVenda(venda);
Dao.CreateOrUpdateStatus itemInsert = itensVendaDAO.createOrUpdate(i);
}
}
}
isVendaAberta();
} catch (SQLException e) {
Log.e("SQLException", "VENDAS PRODUTO LIST ADAPTER-> " + e.getLocalizedMessage());
}
}
}
/** verifica se existe venda em aberta, status = 1 */
private void isVendaAberta(){
List<Venda> list = new ArrayList<Venda>();
try {
QueryBuilder<Venda, Integer> qb = vendaDAO.queryBuilder();
Where where = qb.where();
where.eq("status", 1);
PreparedQuery<Venda> pq = qb.prepare();
list = vendaDAO.query(pq);
//se existir venda aberta seta o id da venda, se naum cria novo objeto de venda
if(list.size() > 0){
venda = list.get(0);
Log.i("VENDA->", venda.getId() + "");
for(ItensVenda i : venda.getItens()){
Log.i("ITEM QTD->", i.getQuantidade() + "");
for(Produto p : i.getProdutos()){
Log.i("PRODUTO NOME->", p.getNome() + "");
}
}
}else{
venda = new Venda();
Log.i("NAUM EXISTE VENDA->", "criou novo objeto, venda id nulo");
}
} catch (SQLException e) {
Log.e("SQLException isVendaAberta VendaProdutoListAdapter->", e.getLocalizedMessage());
}
}
答案 0 :(得分:0)
解决了这个问题。
我做了
/** adiciona venda ao SQLite */
private void insertVenda(){
if(venda.getCliente() == null){
Toast.makeText(context, "Informe o cliente", Toast.LENGTH_SHORT).show();
}else{
try {
// insere o cliente
Dao.CreateOrUpdateStatus clienteInsert = clienteDAO.createOrUpdate(cliente);
// insere a venda
Dao.CreateOrUpdateStatus vendaInsert = vendaDAO.createOrUpdate(venda);
// insere itens de venda
for(ItensVenda i : venda.getItens()){
i.setVenda(venda);
Dao.CreateOrUpdateStatus itemVendaInsert = itensVendaDAO.createOrUpdate(i);
//insere produtos itens venda
for(Produto p: i.getProdutos()){
p.setItem(i);
Dao.CreateOrUpdateStatus produtoInsert = produtoDAO.createOrUpdate(p);
}
}
isVendaAberta();
} catch (SQLException e) {
Log.e("SQLException", "VENDAS PRODUTO-> " + e.getLocalizedMessage());
}
}
}