-4

I'm creating a DB that contains various tables, so now i have a "Admin" table and im trying to add a "Client" table but when i initialize the "Admin" table the "Client" table don't creates and viceversa...

I tried creating the "Admin" table in one activity and the "Client" table in another activity but i have the same results the table that is created is the first that is invoked

When my "Admin" table is created and i try to add some data to "Client" table i dont have any error, but when i try to get the data from "Client" table i get an error:

android.database.sqlite.SQLiteException: no such table: client_list (code 1): , while compiling: SELECT * FROM client_list Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database.

     //This is my DatabaseHelper

     public class DatabaseHelper extends SQLiteOpenHelper {


    private static final String DATABASE_NAME = "Users.db";
    private static final int VERSION = 1;
    private static int SELECTION;



    public DatabaseHelper(Context context, int SELECTION){
        super(context, DATABASE_NAME, null, VERSION);
        this.SELECTION = SELECTION;
    }

    @Override
    public void onCreate(SQLiteDatabase _db) {

        switch (SELECTION){

            case 1:
                // Iniciamos la tabla de admins a guardar
                _db.execSQL(initAdminTable());

                break;
            case 2:
                // Iniciamos la tabla de clientes a guardar
                _db.execSQL(initClientTable());
                break;
        }

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch(SELECTION){
            case 1:
                db.execSQL("DROP TABLE IF EXISTS "+ AdminContract.TABLE_NAME);
                onCreate(db);
                break;
            case 2:
                db.execSQL("DROP TABLE IF EXISTS "+ ClientContract.TABLE_NAME);
                onCreate(db);
                break;
        }

    }


    private String initClientTable(){

        final String SQL_CREATE_CLIENTLIST_TABLE = " CREATE TABLE IF NOT EXISTS " +
                ClientContract.TABLE_NAME + " (" +
                ClientContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
                ClientContract.NOMBRE_CLIENTE + " TEXT NOT NULL, " +
                ClientContract.NOMBRE_LOCAL + " TEXT NOT NULL, "+
                ClientContract.DIRECCION + " TEXT NOT NULL, " +
                ClientContract.CIUDAD + " TEXT NOT NULL, " +
                ClientContract.CORREO + " TEXT NOT NULL, "+
                ClientContract.ZONA + " TEXT NOT NULL, "+
                ClientContract.NUMERO_TELEFONO + " INTEGER NOT NULL, " +
                ClientContract.CODIGO_VENDEDOR + " INTEGER NOT NULL, " +
                ClientContract.RUC + " INTEGER NOT NULL, " +
                ClientContract.STANDBY + " INTEGER NOT NULL, " + // 0 Inactivo, 1 Activo
                ClientContract.TIME_STAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP );";

        return SQL_CREATE_CLIENTLIST_TABLE;
    }

    private String initAdminTable(){

        final String SQL_CREATE_ADMINLIST_TABLE = " CREATE TABLE IF NOT EXISTS " +
                AdminContract.TABLE_NAME + " (" +
                AdminContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
                AdminContract.NOMBRE + " TEXT NOT NULL, " +
                AdminContract.DIRECCION_DOMICILIO + " TEXT NOT NULL, " +
                AdminContract.CIUDAD + " TEXT NOT NULL, " +
                AdminContract.CORREO + " TEXT NOT NULL, "+
                AdminContract.PASSWORD + " TEXT NOT NULL, "+
                AdminContract.NUMERO_TELEFONO + " INTEGER NOT NULL, " +
                AdminContract.RUC + " INTEGER NOT NULL, " +
                AdminContract.TIME_STAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP );";

        return SQL_CREATE_ADMINLIST_TABLE;
    }


    // ADMIN METHODS -------------------------------------------------------------------------------
    public void addAdmin(Admin admin){
        if(SELECTION == 1){
            SQLiteDatabase database = this.getWritableDatabase();
            ContentValues cv = new ContentValues();
            // Iniciamos datos
            cv.put(AdminContract.NOMBRE, admin.getNombre());
            cv.put(AdminContract.CIUDAD, admin.getCiudad());
            cv.put(AdminContract.CORREO, admin.getCorreo());
            cv.put(AdminContract.PASSWORD, admin.getPassword());
            cv.put(AdminContract.DIRECCION_DOMICILIO, admin.getDireccionDomicilio());
            cv.put(AdminContract.NUMERO_TELEFONO, admin.getNumeroTelefono());
            cv.put(AdminContract.RUC, admin.getRUC());
            // Insertamos
            database.insert(AdminContract.TABLE_NAME, null, cv);
            database.close();
        }

    }

    public Admin getAdminById(int id){

        if(SELECTION == 1) {
            SQLiteDatabase database = this.getReadableDatabase();
            Cursor cursor = database.query(AdminContract.TABLE_NAME, AdminContract.COLUMNS, "_id = ?", new String[]{String.valueOf(id)}, null, null, null, null);
            if (cursor != null) {
                cursor.moveToFirst();
            }

            Admin admin = new Admin();
            admin.setNombre(cursor.getString(cursor.getColumnIndex(AdminContract.NOMBRE)));
            admin.setDireccionDomicilio(cursor.getString(cursor.getColumnIndex(AdminContract.DIRECCION_DOMICILIO)));
            admin.setCiudad(cursor.getString(cursor.getColumnIndex(AdminContract.CIUDAD)));
            admin.setCorreo(cursor.getString(cursor.getColumnIndex(AdminContract.CORREO)));
            admin.setPassword(cursor.getString(cursor.getColumnIndex(AdminContract.PASSWORD)));
            admin.setNumeroTelefono(cursor.getString(cursor.getColumnIndex(AdminContract.NUMERO_TELEFONO)));
            admin.setRUC(cursor.getString(cursor.getColumnIndex(AdminContract.RUC)));

            cursor.close();
            return admin;
        }else{
            return null;
        }
    }

    public int getAdminCursorCount(){
        SQLiteDatabase database = this.getReadableDatabase();
        String query = "SELECT * FROM " + AdminContract.TABLE_NAME;
        Cursor cursor = database.rawQuery(query, null);

        return  cursor.getCount();
    }

    public List<Admin> getAllAdmins(){

        if(SELECTION == 1) {
            List<Admin> adminList = new List<Admin>();
            SQLiteDatabase database = this.getWritableDatabase();
            String query = "SELECT * FROM " + AdminContract.TABLE_NAME;
            Cursor cursor = database.rawQuery(query, null);

            Admin admin = null;
            if (cursor.moveToFirst()) {
                do {
                    admin = new Admin();
                    admin.setNombre(cursor.getString(cursor.getColumnIndex(AdminContract.NOMBRE)));
                    admin.setDireccionDomicilio(cursor.getString(cursor.getColumnIndex(AdminContract.DIRECCION_DOMICILIO)));
                    admin.setCiudad(cursor.getString(cursor.getColumnIndex(AdminContract.CIUDAD)));
                    admin.setCorreo(cursor.getString(cursor.getColumnIndex(AdminContract.CORREO)));
                    admin.setPassword(cursor.getString(cursor.getColumnIndex(AdminContract.PASSWORD)));
                    admin.setNumeroTelefono(cursor.getString(cursor.getColumnIndex(AdminContract.NUMERO_TELEFONO)));
                    admin.setRUC(cursor.getString(cursor.getColumnIndex(AdminContract.RUC)));

                    adminList.addTop(admin);
                } while (cursor.moveToNext());
            }

            cursor.close();
            return adminList;
        }else{
            return null;
        }

    }
    // END OF ADMIN METHODS ------------------------------------------------------------------------

    // CLIENT METHODS ------------------------------------------------------------------------------
    public void addClient(Cliente cliente){
        if(SELECTION == 2){
            SQLiteDatabase database = this.getWritableDatabase();
            ContentValues cv = new ContentValues();
            // Iniciamos datos
            cv.put(ClientContract.NOMBRE_CLIENTE, cliente.getNombreCliente());
            cv.put(ClientContract.NOMBRE_LOCAL, cliente.getNombreLocal());
            cv.put(ClientContract.DIRECCION, cliente.getDireccion());
            cv.put(ClientContract.CIUDAD, cliente.getCiudad());
            cv.put(ClientContract.CORREO, cliente.getCorreoElectronico());
            cv.put(ClientContract.ZONA, cliente.getZona());
            cv.put(ClientContract.NUMERO_TELEFONO, cliente.getNumeroTelefono());
            cv.put(ClientContract.CODIGO_VENDEDOR, cliente.getCodigoVendedor());
            cv.put(ClientContract.RUC, cliente.getRUC());
            cv.put(ClientContract.STANDBY, cliente.getStandBy());
            // Insertamos
            database.insert(ClientContract.TABLE_NAME, null, cv);
            database.close();
        }

    }

    public Cliente getClienteById(int id){

        if(SELECTION == 2) {
            SQLiteDatabase database = this.getReadableDatabase();
            Cursor cursor = database.query(ClientContract.TABLE_NAME, ClientContract.COLUMNS, "_id = ?", new String[]{String.valueOf(id)}, null, null, null, null);
            if (cursor != null) {
                cursor.moveToFirst();

            }

            Cliente cliente = new Cliente();
            cliente.setNombreCliente(cursor.getString(cursor.getColumnIndex(ClientContract.NOMBRE_CLIENTE)));
            cliente.setNombreLocal(cursor.getString(cursor.getColumnIndex(ClientContract.NOMBRE_LOCAL)));
            cliente.setDireccion(cursor.getString(cursor.getColumnIndex(ClientContract.DIRECCION)));
            cliente.setCiudad(cursor.getString(cursor.getColumnIndex(ClientContract.CIUDAD)));
            cliente.setCorreoElectronico(cursor.getString(cursor.getColumnIndex(ClientContract.CORREO)));
            cliente.setZona(cursor.getString(cursor.getColumnIndex(ClientContract.ZONA)));
            cliente.setNumeroTelefono(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.NUMERO_TELEFONO))));
            cliente.setCodigoVendedor(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.CODIGO_VENDEDOR))));
            cliente.setRUC(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.RUC))));
            cliente.setStandBy(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.STANDBY))));
            cliente.setID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract._ID))));

            cursor.close();
            return cliente;
        }else{
            return null;
        }
    }

    public int getClientCursorCount(){
        SQLiteDatabase database = this.getReadableDatabase();
        String query = "SELECT * FROM " + ClientContract.TABLE_NAME;
        Cursor cursor = database.rawQuery(query, null);

        return  cursor.getCount();
    }

    public List<Cliente> getAllClients(){

        if(SELECTION == 2) {
            List<Cliente> clienteList = new List<Cliente>();
            SQLiteDatabase database = this.getWritableDatabase();
            String query = "SELECT * FROM " + ClientContract.TABLE_NAME;
            Cursor cursor = database.rawQuery(query, null);

            Cliente cliente = null;
            if (cursor.moveToFirst()) {
                do {
                    cliente = new Cliente();
                    cliente.setNombreCliente(cursor.getString(cursor.getColumnIndex(ClientContract.NOMBRE_CLIENTE)));
                    cliente.setNombreLocal(cursor.getString(cursor.getColumnIndex(ClientContract.NOMBRE_LOCAL)));
                    cliente.setDireccion(cursor.getString(cursor.getColumnIndex(ClientContract.DIRECCION)));
                    cliente.setCiudad(cursor.getString(cursor.getColumnIndex(ClientContract.CIUDAD)));
                    cliente.setCorreoElectronico(cursor.getString(cursor.getColumnIndex(ClientContract.CORREO)));
                    cliente.setZona(cursor.getString(cursor.getColumnIndex(ClientContract.ZONA)));
                    cliente.setNumeroTelefono(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.NUMERO_TELEFONO))));
                    cliente.setCodigoVendedor(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.CODIGO_VENDEDOR))));
                    cliente.setRUC(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.RUC))));
                    cliente.setStandBy(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract.STANDBY))));
                    cliente.setID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract._ID))));


                    clienteList.addTop(cliente);
                } while (cursor.moveToNext());
            }

            cursor.close();
            return clienteList;
        }else{
            return null;
        }


    }

    public Cliente findClientByData(Object object){

        Cliente cliente = null;
        SQLiteDatabase database = this.getWritableDatabase();
        String query = "SELECT * FROM " + ClientContract.TABLE_NAME;
        Cursor cursor = database.rawQuery(query, null);
        if(object.getClass().equals(String.class)){
            if (cursor.moveToFirst()) {
                do {
                    if(cursor.getString(cursor.getColumnIndex(ClientContract.NOMBRE_CLIENTE)).equals(object) || cursor.getString(cursor.getColumnIndex(ClientContract.NOMBRE_LOCAL)).equals(object)){
                        cliente = getClienteById(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ClientContract._ID))));
                        break;
                    }
                }while(cursor.moveToNext());
            }
        }


        return cliente;
    }

    // END OF CLIENT METHODS -----------------------------------------------------------------------

}



And i Use in my MainActivity like this:
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


DatabaseHelper databaseHelperClient = new DatabaseHelper(InitActivity.this, 2);// Number two indicates to create table for client
            databaseHelperClient.addClient(client);
DatabaseHelper databaseHelperAdmin = new DatabaseHelper(InitActivity.this, 1); // Number one indicates to create table for admin
            databaseHelperAdmin.addAdmin(admin);


}

// But in this case just admin is created

i expect to create the "Client" table

Ramprasath Selvam
  • 3,868
  • 3
  • 25
  • 41
MADMVX
  • 354
  • 1
  • 4
  • 18
  • You could create table simply like this db.execSQL("CREATE TABLE ".....); db.execSQL("CREATE TABLE ".....); (after create DB), you call String (which holds Create Statement). But if you want to create table different activity then you will need to use version cause method of onUpgrade is like - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} – Hasanuzzaman Rana Jun 06 '19 at 07:06
  • Also you have used an variable "SELECTION" no need to use this, when you call Class it will constructor -> OnCreate method, when change DB version -> OnUpgrade, so in Main method you need to call like this "db = new DatabaseHelper(this);" it will work. – Hasanuzzaman Rana Jun 06 '19 at 07:16

2 Answers2

2

onUpgrade wont be called until you change VERSION of DB

Jolson Da Costa
  • 1,095
  • 1
  • 12
  • 31
0

When you want to change the DB then onUpgrade must be called, for this you need to increase VERSION every time you have changes in your DB Structure.

Rajat Mehra
  • 1,462
  • 14
  • 19