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 tabletbl_livros_da_venda
– Isac
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 Rodarte
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
– Leonardo Dias
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
.– Isac
That’s what I imagined when I read Isac. Thank you I will see well I’ll see what Leonardo indicated too
– Yuri Rodarte
I’m done with the Version update like Leonardo said, Thank you.
– Yuri Rodarte