Error listing table directly from Sqlite

Asked

Viewed 110 times

0

Guys: I’m creating a stock control application, I have a screen as follows:

inserir a descrição da imagem aqui

When I click on the "PRODUCT" button it was to go to that other screen:

inserir a descrição da imagem aqui

Only when I click on the button "PRODUCT" the application hangs, and I added a Listview to list the registered products, commenting on the code of Listview it works, but my intention is to leave listed the products as soon as you open the screen Products, follows the code below:

Code of Class Products:

public class Produtos extends AppCompatActivity implements SearchView.OnQueryTextListener {

DBHelper bd;
ArrayList<Produto> listaProdutos;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.produtos);

    bd = new DBHelper(this);
    ListView lista = (ListView)findViewById(R.id.ltvProdutos);
    listaProdutos = bd.getAllProdutos();
    ProdutoAdapter adapter = new ProdutoAdapter(this, listaProdutos);
    lista.setAdapter(adapter);

    lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Intent intent = new Intent(Produtos.this, EditarProduto.class);
            intent.putExtra("ID", listaProdutos.get(i).getId());
            startActivity(intent);
        }
    });

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Produtos.this, CadastroProduto.class);
            startActivity(i);
        }
    });
}

@Override

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.navigation, menu);
    MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    searchView.setOnQueryTextListener(this);
    return true;
}

@Override
public boolean onQueryTextSubmit(String query) {
    // User pressed the search button
    return false;
}

@Override
public boolean onQueryTextChange(String newText) {
    // User changed the text
    return false;
}

}

Bank class code:

public class DBHelper extends SQLiteOpenHelper {

private static final int VERSAO_BANCO = 1;
private static final String NOME_BANCO = "CONTROLE_DE_ESTOQUE";
private static final String TABELA_PRODUTOS = "produtos";
private static final String ID = "_id";
private static final String DESCRICAO = "descricao";
private static final String CATEGORIA = "categoria";
private static final String UNIDADEMEDIDA = "unidadeMedida";
private static final String ESTOQUE_ATUAL = "estoqueAtual";
private static final String ESTOQUE_MINIMO = "estoqueMinimo";
private static final String VALOR_CUSTO = "valorCusto";
private static final String VALOR_VENDA = "valorVenda";
private static final String[] COLUNAS = {TABELA_PRODUTOS};

private static final String TABELA_FORNECEDORES = "fornecedores";
private static final String ID_FORNECEDOR = "_id";
private static final String RAZAO_SOCIAL = "razaoSocial";
private static final String CNPJ = "cnpj";
private static final String INSCRICAO_ESTADUAL = "inscricaoEstadual";
private static final String TELEFONE = "telefone";
private static final String ENDERECO = "endereco";
private static final String[] COLUNAS_FORNECEDOR = {TABELA_FORNECEDORES};


public DBHelper(Context context) {
    super(context, NOME_BANCO, null, VERSAO_BANCO);
}

@Override
public void onCreate(SQLiteDatabase db) {

    String QUERY_USUARIO = "CREATE TABLE TABELA_USUARIOS (_ID integer primary key autoincrement, nomeUsuario TEXT, senha TEXT);";
    db.execSQL(QUERY_USUARIO);

    String QUERY_PRODUTO = "CREATE TABLE TABELA_PRODUTOS (_ID integer primary key autoincrement, descricao TEXT, categoria TEXT," +
            " unidadeMedida TEXT, valorCusto TEXT, valorVenda TEXT, estoqueAtual TEXT, estoqueMinimo TEXT);";
    db.execSQL(QUERY_PRODUTO);

    String QUERY_FORNECEDOR = "CREATE TABLE TABELA_FORNECEDORES (_ID integer primary key autoincrement, razaoSocial TEXT, cnpj TEXT," +
            " inscricaoEstadual TEXT, telefone TEXT, endereco TEXT);";
    db.execSQL(QUERY_FORNECEDOR);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE IF EXISTS TABELA_USUARIOS;");
    onCreate(db);

}

public long CriarUsuario(String nomeUsuario, String senha) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("nomeusuario", nomeUsuario);
    cv.put("senha", senha);
    long result = db.insert("TABELA_USUARIOS", null, cv);
    return result;
}

public String ValidarUsuario(String nomeUsuario, String senha) {
    SQLiteDatabase db = getReadableDatabase();
    Cursor c = db.rawQuery("SELECT * FROM TABELA_USUARIOS WHERE nomeUsuario=? AND senha=?", new String[]{nomeUsuario, senha});
    if (c.getCount() > 0) {
        return "OK";
    }
    return "ERRO";
}

public long CriarProduto(Produto produto) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(DESCRICAO, produto.getDescricao());
    cv.put(CATEGORIA, produto.getCategoria());
    cv.put(UNIDADEMEDIDA, produto.getUnidadeMedida());
    cv.put(ESTOQUE_ATUAL, produto.getEstoqueAtual());
    cv.put(ESTOQUE_MINIMO, produto.getEstoqueMinimo());
    cv.put(VALOR_CUSTO, produto.getValorCusto());
    cv.put(VALOR_VENDA, produto.getValorVenda());

    long result = db.insert("TABELA_PRODUTOS", null, cv);
    return result;
}

public Produto getProduto(int id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABELA_PRODUTOS, // a. tabela
            COLUNAS, // b. colunas
            " id = ?", // c. colunas para comparar
            new String[] { String.valueOf(id) }, // d. parâmetros
            null, // e. group by
            null, // f. having
            null, // g. order by
            null); // h. limit
    if (cursor == null) {
        return null;
    } else {
        cursor.moveToFirst();
        Produto produto = cursorToProduto(cursor);
        return produto;
    }
}

private Produto cursorToProduto(Cursor cursor) {
    Produto produto = new Produto();
    produto.setId(Integer.parseInt(cursor.getString(0)));
    produto.setDescricao(cursor.getString(1));
    produto.setCategoria(cursor.getString(2));
    produto.setUnidadeMedida(cursor.getString(3));
    produto.setValorCusto(cursor.getString(4));
    produto.setEstoqueAtual(Integer.parseInt(cursor.getString(5)));
    return produto;
}

public ArrayList<Produto> getAllProdutos() {
    ArrayList<Produto> listaProdutos = new ArrayList<Produto>();
    String query = "SELECT * FROM " + TABELA_PRODUTOS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    if (cursor.moveToFirst()) {
        do {
            Produto produto = cursorToProduto(cursor);
            listaProdutos.add(produto);
        } while (cursor.moveToNext());
    }
    return listaProdutos;
}

}

And the error that appears in logCat:

11-15 20:44:23.340 3574-3591/com.example.rodrigoconceicao.controleestoque2_1 
E/EGL_emulation: tid 3591: eglSurfaceAttrib(1210): error 0x3009 
(EGL_BAD_MATCH)
11-15 20:44:32.923 3574-3591/com.example.rodrigoconceicao.controleestoque2_1 E/EGL_emulation: tid 3591: eglSurfaceAttrib(1210): error 0x3009 (EGL_BAD_MATCH)
11-15 20:44:33.373 3574-3591/com.example.rodrigoconceicao.controleestoque2_1 E/EGL_emulation: tid 3591: eglSurfaceAttrib(1210): error 0x3009 (EGL_BAD_MATCH)
11-15 20:44:35.791 3574-3574/com.example.rodrigoconceicao.controleestoque2_1 E/SQLiteLog: (1) no such table: produtos
11-15 20:44:35.796 3574-3574/com.example.rodrigoconceicao.controleestoque2_1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rodrigoconceicao.controleestoque2_1, PID: 3574
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rodrigoconceicao.controleestoque2_1/com.example.rodrigoconceicao.controleestoque2_1.Produtos}: android.database.sqlite.SQLiteException: no such table: produtos (code 1): , while compiling: SELECT * FROM produtos
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
 Caused by: android.database.sqlite.SQLiteException: no such table: produtos (code 1): , while compiling: SELECT * FROM produtos
    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.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
    at com.example.rodrigoconceicao.controleestoque2_1.DBHelper.getAllProdutos(DBHelper.java:131)
    at com.example.rodrigoconceicao.controleestoque2_1.Produtos.onCreate(Produtos.java:31)
    at android.app.Activity.performCreate(Activity.java:6975)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6541) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

2 answers

0

I think it’s pretty clear your problem, on the line of your stacktrace:

Caused by: android.database.sqlite.SQLiteException: no such table: produtos

In other words, the products table does not exist so the select in it returns an Exception.

0

the problem you are missing when creating the table and columns. You are placing the TABELA_PRODUTOS variable in quotes. Pay attention to table and column names, you need to uninstall and reinstall the app. See this tutorial here. https://www.devmedia.com.br/criando-um-crud-com-android-studio-e-sqlite/32815

public class DBHelper extends SQLiteOpenHelper {

private static final int VERSAO_BANCO = 1;
private static final String NOME_BANCO = "CONTROLE_DE_ESTOQUE";
private static final String TABELA_PRODUTOS = "produtos";
private static final String TABELA_USUARIOS = "usuarios";
private static final String ID = "_id";
private static final String DESCRICAO = "descricao";
private static final String CATEGORIA = "categoria";
private static final String UNIDADEMEDIDA = "unidadeMedida";
private static final String ESTOQUE_ATUAL = "estoqueAtual";
private static final String ESTOQUE_MINIMO = "estoqueMinimo";
private static final String VALOR_CUSTO = "valorCusto";
private static final String VALOR_VENDA = "valorVenda";
private static final String[] COLUNAS = {TABELA_PRODUTOS};

private static final String TABELA_FORNECEDORES = "fornecedores";
private static final String ID_FORNECEDOR = "_id";
private static final String RAZAO_SOCIAL = "razaoSocial";
private static final String CNPJ = "cnpj";
private static final String INSCRICAO_ESTADUAL = "inscricaoEstadual";
private static final String TELEFONE = "telefone";
private static final String ENDERECO = "endereco";
private static final String[] COLUNAS_FORNECEDOR = {TABELA_FORNECEDORES};


public DBHelper(Context context) {
    super(context, NOME_BANCO, null, VERSAO_BANCO);
}

@Override
public void onCreate(SQLiteDatabase db) {

    String QUERY_USUARIO = "CREATE TABLE "+ TABELA_USUARIOS +"("+ID +" integer primary key autoincrement, nomeUsuario TEXT, senha TEXT);";
    db.execSQL(QUERY_USUARIO);
    Log.d("TAB","criou usuario");

    String QUERY_PRODUTO = "CREATE TABLE "+TABELA_PRODUTOS +"(" + ID+" integer primary key autoincrement, descricao TEXT, categoria TEXT," +
            " unidadeMedida TEXT, valorCusto TEXT, valorVenda TEXT, estoqueAtual TEXT, estoqueMinimo TEXT);";
    db.execSQL(QUERY_PRODUTO);
    Log.d("TAB","criou produto");

    String QUERY_FORNECEDOR = "CREATE TABLE " +TABELA_FORNECEDORES +"("+ID_FORNECEDOR +" integer primary key autoincrement, razaoSocial TEXT, cnpj TEXT," +
            " inscricaoEstadual TEXT, telefone TEXT, endereco TEXT);";
    db.execSQL(QUERY_FORNECEDOR);
    Log.d("TAB","criou fornecedor");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE IF EXISTS TABELA_USUARIOS;");
    onCreate(db);

}

public long CriarUsuario(String nomeUsuario, String senha) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("nomeUsuario", nomeUsuario);
    cv.put("senha", senha);
    long result = db.insert(TABELA_USUARIOS, null, cv);
    return result;
}

public Boolean ValidarUsuario(String nomeUsuario, String senha) {
    SQLiteDatabase db = getReadableDatabase();
    Cursor c = db.rawQuery("SELECT * FROM "+TABELA_USUARIOS +" WHERE nomeUsuario=? AND senha=?", new String[]{nomeUsuario, senha});
    if (c.getCount() > 0) {
        return true;
    }
    return false;
}

public long CriarProduto(Produto produto) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(DESCRICAO, produto.getDescricao());
    cv.put(CATEGORIA, produto.getCategoria());

    long result = db.insert(TABELA_PRODUTOS, null, cv);
    Log.d("TAB","inseriu "+produto.getDescricao());
    return result;
}

public Produto getProduto(int id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABELA_PRODUTOS, // a. tabela
            null, // b. colunas
            ID+"= ?", // c. colunas para comparar
            new String[] { String.valueOf(id) }, // d. parâmetros
            null, // e. group by
            null, // f. having
            null, // g. order by
            null); // h. limit
    if (cursor == null) {
        return null;
    } else {
        cursor.moveToFirst();
        Produto produto = cursorToProduto(cursor);
        return produto;
    }
}

private Produto cursorToProduto(Cursor cursor) {
    Produto produto = new Produto();
    produto.setId(Integer.parseInt(cursor.getString(0)));
    produto.setDescricao(cursor.getString(1));
    produto.setCategoria(cursor.getString(2));
    return produto;
}

public ArrayList<Produto> getAllProdutos() {
    ArrayList<Produto> listaProdutos = new ArrayList<Produto>();
    String query = "SELECT * FROM " + TABELA_PRODUTOS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    if (cursor.moveToFirst()) {
        do {
            Produto produto = cursorToProduto(cursor);
            listaProdutos.add(produto);
        } while (cursor.moveToNext());
    }
    return listaProdutos;
}

}

Browser other questions tagged

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