Olá pessoal, estou fazendo meu primeiro aplicativo android(projeto da faculdade), e estou tendo problemas para realizar um CRUD.
sempre que vou inserir dados na tabela da o erro, no such table : “nome da tabela”, fiz o debug,o erro ocorre no meu EditoraDao, quando vou executar o insert na tabela, porem não consigo resolver, pois não conheço bem android e nem ao mesmos sei se a tabela foi criada mesmo ou não.
Oque eu ja pude perceber e se eu inserir na tabela Login que tbm crio no oncreate() da activity main o insert funciona.
– classe que cria meu banco de dados
package bancoDeDados;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by fabio on 07/12/16.
*/
public class CreateDataBase extends SQLiteOpenHelper {
private final static String DB_Name = "livraria";
private final static Integer DV_Version = 1;
//tabelas do banco de dados
private String TABLE_LOGIN =
"CREATE TABLE IF NOT EXISTS login(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT,"+
"login TEXT," +
"senha TEXT"+
");";
private String TABLE_EDITORA =
"CREATE TABLE IF NOT EXISTS editora(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT,"+
"login TEXT," +
"senha TEXT"+
");";
private String TABLE_AUTOR =
"CREATE TABLE IF NOT EXISTS autor(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"nome TEXT," +
"dataNascimento TEXT," +
"email TEXT," +
"ativo BOOLEAN" +
");";
private String TABLE_LIVRO =
"CREATE TABLE IF NOT EXISTS livro(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"nome TEXT," +
"descricao TEXT," +
"isbn TEXT," +
"valor DECIMAL(10,2)," +
"autorFk INTEGER," +
"FOREIGN KEY ('autorFk')" +
");";
public CreateDataBase(Context context) {
super(context, DB_Name,null, DV_Version);
Log.i("Criando banco de dados","banco de dados livraria criado com sucesso!");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_LOGIN);
Log.i("Criando tabela Login","Tabela login criada com sucesso!");
db.execSQL(TABLE_EDITORA);
Log.i("Criando tabela Editora","Tabela editora criada com sucesso!");
db.execSQL(TABLE_AUTOR);
Log.i("Criando tabela Autor","Tabela autor criada com sucesso!");
db.execSQL(TABLE_LIVRO);
Log.i("Criando tabela Livro","Tabela livro criada com sucesso!");
String sql = "INSERT INTO login(login,senha)" +
"VALUES('fabio','123')";
db.execSQL(sql);
Log.i("inserindo usuario","Usuário padrão inserido com sucesso!");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + "livraria");
onCreate(db);
Log.i("Atualizando banco","Atualizado com sucesso!");
}
}
–classe que uso para inciar o banco de dados
package bancoDeDados;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* Created by fabio on 07/12/16.
*/
public class DbManager {
private static CreateDataBase db = null;
public DbManager(){}
public CreateDataBase getDb(){
return db;
}
public DbManager(Context context){
if(db == null){
db = new CreateDataBase(context);
}
}
}
–Minha activityMain
package com.fatec.fabio.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.sql.SQLException;
import bancoDeDados.DbManager;
import process.LoginProcess;
import util.NegocioException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//instanciando banco de dados
DbManager dbManager = new DbManager(getApplicationContext());
final EditText txtUsuario = (EditText) findViewById(R.id.input_usuario);
final EditText txtSenha = (EditText) findViewById(R.id.input_senha);
//configurando evento de cique no botão
findViewById(R.id.button_logar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView txtMessage = (TextView) findViewById(R.id.message);
String usuario = txtUsuario.getText().toString();
String senha = txtSenha.getText().toString();
try {
new LoginProcess().verificarLogin(usuario,senha);
Intent intent = new Intent(getBaseContext(),HomeActivity.class);
startActivity(intent);
}catch (NegocioException e){
txtMessage.setText(e.getMessage());
}catch (SQLException ex){
txtMessage.setText(ex.getMessage());
}
}
});
}
}
essas classes ai de cima são asque defino, crio e chamo a base de dados assim que o aplicativo é usado(activivy main), os logs que eu coloco para mostrar se a table foi criada tbm não aparecem, apenas aparece o log do baco de dados criado com sucesso
– O erro acontece nessa classe aqui
–a exception sqlLite no such table ocorre na linha do método salvar
sqlDb.exeSql(sql);
package dao;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import bancoDeDados.CreateDataBase;
import bancoDeDados.DbManager;
import model.Editora;
/**
* Created by fabio on 08/12/16.
*/
public class EditoraDao {
private static CreateDataBase db = new DbManager().getDb();
public List<Editora> listar(){
List<Editora> editoras = new ArrayList<Editora>();
SQLiteDatabase sqlDb = db.getReadableDatabase();
String sql = "SELECT nome,cidade FROM editora";
Cursor cursor = sqlDb.rawQuery(sql,null);
if(cursor != null && cursor.moveToFirst()){
while (cursor.moveToNext()){
Editora editora = new Editora();
editora.setNome(cursor.getString(0));
editora.setCidade(cursor.getString(1));
editoras.add(editora);
}
}
return editoras;
}
public void salvar(Editora editora){
String sql = "INSERT INTO editora(nome,cidade) " +
"VALUES('"+ editora.getNome()+"','"+editora.getCidade()+"')";
SQLiteDatabase sqlDb = db.getWritableDatabase();
sqlDb.execSQL(sql);
sqlDb.close();
}
public void excluir(Long codigo){
String sql = "DELETE FROM editora " +
"WHERE codigo = " + codigo;
}
}