用ORMLite尝试插入值?

时间:2015-03-11 17:56:03

标签: android sqlite ormlite

我尝试使用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());
            }
        }

1 个答案:

答案 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());
            }
        }
    }