Failure to perform Sqlite Insert

Asked

Viewed 41 times

0

When executing this code snippet, returns the error below. What can be the cause?

public class LivroDaVendaDAO {

    // sqlite
    private ConexaoSQLite sqliteDataBase;

    // nome da tabela de livrosDaVenda
    private final String TBL_LIVRO_DA_VENDA = "tbl_livros_da_venda";

    // nome das colunas da tabela livrosDaVenda
    private final String KEY_CODIGO = "pk_lv_ve_codigo";
    private final String KEY_LIV_CODIGO = "liv_codigo";
    private final String KEY_VEN_CODIGO = "ven_codigo";
    private final String KEY_QUANTIDADE = "lv_ve_quantidade";

    // colunas da tabela
    private final String[] COLUNAS = { KEY_CODIGO, KEY_LIV_CODIGO, KEY_VEN_CODIGO, KEY_QUANTIDADE };

    public LivroDaVendaDAO(ConexaoSQLite pSqliteDataBase) {
        this.sqliteDataBase = pSqliteDataBase;
    }

    /**
     * Salva um livroDaVenda no banco
     * 
     * @param livroDaVenda
     * @return long - codigo do ultimo livroDaVenda inserido
     */
    public long salvarLivroDaVendaDAO(LivroDaVenda livroDaVenda) {
        long lvVeCodigo = 0; // codigo do ultimo livroDaVenda inserido

        // recupera a instancia do banco para efetuar escrita
        SQLiteDatabase db = this.sqliteDataBase.getWritableDatabase();

        try {

            // Cria os contentValues (nomes das colunas das tabelas e
            ContentValues values = new ContentValues();

            // valores que ser�o inseridos no banco de dados)
            values.put(KEY_LIV_CODIGO, livroDaVenda.getLvVeLivro().getLivCodigo());
            values.put(KEY_VEN_CODIGO, livroDaVenda.getVenCodigo());
            values.put(KEY_QUANTIDADE, livroDaVenda.getLvVeQuantidade());

            // executa o insert no banco
            lvVeCodigo = db.insert(TBL_LIVRO_DA_VENDA, // nome da tabela
                    null, // nullColumnHack
                    values); // key/valores

        } catch (Exception e) {
            Log.d("DB_ERROR", "NÃO FOI POSSÍVEL INSERIR O LIVRO DA VENDA");
        } finally {
            // fecha a conexao
            db.close();
        }
        return lvVeCodigo;
    }

    /**
     * Retorna um livroDaVenda da base de dados
     * 
     * @param pLivCodigo
     * @return Livro
     */
    public LivroDaVenda getLivroDaVendaDAO(long pLivCodigo) {

        // novo livroDaVenda vazio
        LivroDaVenda livroDaVenda = new LivroDaVenda();

        // recupera a instancia do banco para efetuar apenas leituras
        SQLiteDatabase db = this.sqliteDataBase.getReadableDatabase();

        // cursor para movimentar entre os resultados da query
        Cursor cursor = null;

        try {

            // constroi a consulta (query)
            // veja outro modo de consulta no metodo getListaLivroDAO
            cursor = db.query(TBL_LIVRO_DA_VENDA, // a. tabela
                    COLUNAS, // b. nomes das colunas
                    KEY_CODIGO + " = ?", // c. selections (where)
                    new String[] { String.valueOf(pLivCodigo) }, // d.
                    // selections
                    // args
                    null, // e. group by
                    null, // f. having
                    null, // g. order by
                    null); // h. limit

            // vai para o primeiro resultado, caso exista
            if (cursor != null) {
                cursor.moveToFirst();
            }

            // cria um livroDaVenda com os dados vindos do banco
            // livroDaVenda.setLivCodigo(Integer.parseInt(cursor.getString(0)));
            // livroDaVenda.setLivNome(cursor.getString(1));
            // livroDaVenda.setLivValor(cursor.getFloat(2));
            // livroDaVenda.setDisCodigo(cursor.getInt(3));
            // livroDaVenda.setLivEstoque(cursor.getInt(4));

        } catch (Exception e) {
            Log.d("DB_ERROR", "NÃO FOI POSSÍVEL RECUPERAR O LIVRO");
        } finally {
            // fecho o cursor
            cursor.close();
            // fecho a conexao
            db.close();
        }

        // retorna o livroDaVenda
        return livroDaVenda;
    }

    /**
     * Recupero uma lista contendo todos os livrosDaVenda do banco
     * 
     * @return List - lista de livrosDaVenda
     */
    public ArrayList<LivroDaVenda> getListaLivroDaVendaDAO() {
        Livro livroDaVenda = null;
        ArrayList<LivroDaVenda> listaLivro = new ArrayList<LivroDaVenda>();
        SQLiteDatabase db = null;
        Cursor cursor = null;

        // constroi a query
        String query = "SELECT * FROM " + TBL_LIVRO_DA_VENDA + " ORDER BY " + KEY_LIV_CODIGO;

        try {
            // recupero a referencia a leitura no banco
            db = this.sqliteDataBase.getReadableDatabase();

            // crio um cursor (busca resultados na consulta)
            cursor = db.rawQuery(query, null);

            // movo cursor para primeiro registro
            if (cursor.moveToFirst()) {

                // recupero cada livroDaVenda com os dados vindos do banco
                do {
                    livroDaVenda = new Livro();
                    livroDaVenda.setLivCodigo(Long.parseLong(cursor.getString(0)));
                    livroDaVenda.setLivNome(cursor.getString(1));
                    livroDaVenda.setLivValor(cursor.getFloat(2));
                    livroDaVenda.setDisCodigo(cursor.getLong(3));
                    livroDaVenda.setLivEstoque(cursor.getInt(4));

                    // adiciono cada livroDaVenda encontrado a uma lista
                    // listaLivro.add(livroDaVenda);

                    // movo cursor para proximo registro
                } while (cursor.moveToNext());
            }
        } catch (Exception e) {
            Log.d("DB_ERROR", "NÃO FOI POSSÍVEL LISTAR LIVRO_DA_VENDA");
        } finally {
            // fecho o cursor
            cursor.close();
            // fecho a conexao
            db.close();
        }

        return listaLivro;
    }

    /**
     * Exclui os livrosDaVenda de uma venda da base de dados
     * 
     * @param pVenCodigo
     * @return boolean
     */
    public boolean excluirLivrosDaVendaDAO(long pVenCodigo) {

        SQLiteDatabase db = null;
        try {
            // recupera uma instancia de escrita no banco
            db = this.sqliteDataBase.getWritableDatabase();

            // executa o delete no banco
            db.delete(
            // tabela
                    TBL_LIVRO_DA_VENDA,
                    // selection (where)
                    KEY_VEN_CODIGO + " = ?",
                    // valores do selection
                    new String[] { String.valueOf(pVenCodigo) });
        } catch (Exception e) {
            Log.d("DB_ERROR", "NÃO FOI POSSÍVEL DELETAR O LIVRO");
            return false;
        } finally {
            // fecha a conexão
            db.close();
        }
        return true;
    }

}

Error:

E/Sqlitelog: (1) in such table: tbl_livros_da_venda E/Sqlitedatabase: Error inserting ven_codigo=11 liv_codigo=0 lv_ve_quantidade=1 android.database.sqlite.Sqliteexception: no such table: tbl_livros_da_venda (code 1): while compiling: INSERT INTO tbl_book_da_venda(ven_codigo,liv_codigo,lv_ve_quantidade) VALUES (?,,?) at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(Sqliteconnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(Sqliteconnection.java:500) at android.database.sqlite.SQLiteSession.prepare(Sqlitesession.java:588) at android.database.sqlite.SQLiteProgram.(Sqliteprogram.java:58) at android.database.sqlite.SQLiteStatement.(Sqlitestatement.java:31) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(Sqlitedatabase.java:1472) at android.database.sqlite.SQLiteDatabase.Insert(Sqlitedatabase.java:1343) At com.br.DAO.LivroDaVendaDAO.save At com.br.controller.LivroDaVendaCtr.salvaLivDaVendaCtrl(Librodavendactrl.java:35) at com.br.Activity.Vendaactivity$2$1.onClick(Vendaactivity.java:321) at com.android.Internal.app.Alertcontroller$Buttonhandler.handleMessage(Alertcontroller.java:166) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.Activitythread.main(Activitythread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.Internal.os.Zygoteinit$Methodandargscaller.run(Zygoteinit.java:886) at com.android.Internal.os.Zygoteinit.main(Zygoteinit.java:776)

  • Missed the create table to create the table tbl_livros_da_venda

  • Isac Create Table is created dbHelper String sqlTabelaLivroVenda = "CREATE TABLE IF NOT EXISTS tbl_libros_da_venda" + "(" + //sale book code "pk_lv_ve_code INTEGER PRIMARY KEY AUTOINCREMENT, " + //reference to book "liv_code INTEGER, " + ///reference for sale "ven_code INTEGER," + //quantity of item sold "lv_ve_quantity INTEGER" + "); "; , and is being called.

  • Yuri, this happens because you added some column to the table, after it has been created and installed in the internal memory of your device, uninstall the app and run again, which will solve, or you can increase the version of the tbm database, changing to 2 (if it is in version 1) will also solve

  • I don’t see what you indicated in the question code. But if you have the creation, it can also be what @Leonardodias indicated, because changes to the database imply reinstalling the application or changing the version of the database. But the error is clear "(...) in such table (...)" or it did not find the table tbl_livros_da_venda.

  • That’s what I imagined when I read Isac. Thank you I will see well I’ll see what Leonardo indicated too

  • I’m done with the Version update like Leonardo said, Thank you.

Show 1 more comment
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.