dimanche 21 février 2016

android.database.sqlite.SQLiteException: unknown database B (code 1):

I am trying to dynamically create tables. But, while creating a new table, unknown database exception comes up. why? How to solve the problem?

MainActivity.java

package com.example.demoapp;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;

public class MainActivity extends Activity {

Button ADD,TAKE,STATS,UPLOAD;
static Spinner SPIN;
public Context CTX = this;
static ArrayAdapter<String> adapter;
static List<String> 

list = new ArrayList<String>();
public DatabaseOperations DOP = new DatabaseOperations(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ADD = (Button)findViewById(R.id.mainAdd);
    SPIN = (Spinner) findViewById(R.id.mainSpin);




    //SQLiteDatabase SQ = DOP.getReadableDatabase();

    Cursor CR = DOP.getInformation(DOP);

    if(!CR.moveToFirst());
    else
    {
        do
        {
            list.add(CR.getString(0));
        }
        while(CR.moveToNext());
    }

    adapter = new ArrayAdapter<String>(getApplicationContext(),
            android.R.layout.simple_spinner_item, list);
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    MainActivity.SPIN.setAdapter(adapter); 


    ADD.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            Intent i = new Intent(MainActivity.this,Details.class);
            startActivity(i);

        }
    });

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

Details.java

    package com.example.demoapp;

    import java.util.ArrayList;
    import java.util.List;

    import com.example.demoapp.AppData.ClassInfo;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;

    public class Details extends Activity {

        EditText SUB,STRENGTH;
        Spinner SEM,STREAM;
        Button SAVE;
    String sub="", abc1="",abc2="",abc="";
    Context c1=this, ctx=this;

    int stre;

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

        final DatabaseOperations dp = new DatabaseOperations(this);

        STREAM = (Spinner)findViewById(R.id.detStream);
        String[] items1 = new String[]{"B.ARCH","B.TECH", "DIPLOMA",               "MCA","M.TECH"};
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, items1);
        STREAM.setAdapter(adapter1);
        STREAM.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View arg1,
                    int position, long id) {
                // TODO Auto-generated method stub
                Log.v("item", (String) parent.getItemAtPosition(position));
                abc1 = (String) parent.getItemAtPosition(position)+"_";

            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });



        SEM = (Spinner)findViewById(R.id.detSem);
        String[] items2 = new String[]{"1st", "2nd",     "3rd","4th","5th","6th","7th","8th","9th","10th"};
        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, items2);
        SEM.setAdapter(adapter2);
        SEM.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View arg1,
                    int position, long id) {
                // TODO Auto-generated method stub
                Log.v("item", (String) parent.getItemAtPosition(position));
                abc2 = (String) parent.getItemAtPosition(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

        //abc = abc1 + abc2;

        SUB = (EditText) findViewById(R.id.detSub); 
        STRENGTH = (EditText) findViewById(R.id.detStrength);


        SAVE = (Button) findViewById(R.id.detSave);
        SAVE.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                sub = SUB.getText().toString();
                stre = Integer.valueOf(STRENGTH.getText().toString());
                abc = abc1 + abc2;
                abc += "_"+sub;
                Log.v("item", abc);

                //spinner = (Spinner) findViewById(R.id.spinner);


                SQLiteDatabase SQ = dp.getWritableDatabase();
                ContentValues cv = new ContentValues();

                cv.put(ClassInfo.CLASS_NAME,abc);
                cv.put(ClassInfo.NUMBER, stre);


                SQ.insert(ClassInfo.TABLE_NAME, null, cv);

                AppData.sendInfo(abc,stre); 

                //DatabaseOperations dp1 = new DatabaseOperations(c1);
                SQLiteDatabase SQ1 = dp.getReadableDatabase();

                dp.newTable(abc,dp);

                dp.fillTable(abc,stre,dp);









                //ArrayAdapter<String> adapter;
                //List<String> list;

                //list = new ArrayList<String>();
                MainActivity.list.add(abc);
                abc="";
                MainActivity.adapter = new ArrayAdapter<String>(getApplicationContext(),
                        android.R.layout.simple_spinner_item, MainActivity.list);
                MainActivity.adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                MainActivity.SPIN.setAdapter(MainActivity.adapter);

                finish();
            }

        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.details, menu);
        return true;
    }

}

AppData.java

package com.example.demoapp;

import android.provider.BaseColumns;

public class AppData {

    public static String tableNameHolder="";
    public static int strengthHolder;
    public AppData(){}

    public static void sendInfo(String abc, int stre) {
        // TODO Auto-generated method stub
        tableNameHolder = abc;
        strengthHolder = stre;
    }

    public static abstract class ClassInfo implements BaseColumns{
        public static final String CLASS_NAME = "class_name";
        public static final String NUMBER = "number";
        public static final String ROLL_NO = "roll_no";
        public static final String PRESENT = "present";
        public static final String TOTAL = "total";

        public static final String DATABASE_NAME = "class_info.db";
        public static final String TABLE_NAME = "class_table";

    }

}

DatabaseOperations.java

package com.example.demoapp;

import com.example.demoapp.AppData.ClassInfo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseOperations extends SQLiteOpenHelper {

    public static int database_version = 1;
    public String CREATE_QUERY = "CREATE TABLE " + ClassInfo.TABLE_NAME + "(" + ClassInfo.CLASS_NAME + " TEXT," + ClassInfo.NUMBER + " INTEGER);";
    String tableName="";
    public String CREATE_QUERY2 ;


    public DatabaseOperations(Context context) {
        super(context, ClassInfo.DATABASE_NAME, null, database_version);
        // TODO Auto-generated constructor stub
        Log.d("Database operations", "Database created");

    }

    @Override
    public void onCreate(SQLiteDatabase sdb) {
        // TODO Auto-generated method stub

        Log.d("Database operations", "onCreate entered");
        sdb.execSQL(CREATE_QUERY);
        Log.d("Database operations", CREATE_QUERY);
        Log.d("Database operations", "onCreate - Table created");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

    public Cursor getInformation(DatabaseOperations dop){
        SQLiteDatabase SQ = dop.getReadableDatabase();
        String[] columns = {ClassInfo.CLASS_NAME, ClassInfo.NUMBER};
        Cursor CR = SQ.query(ClassInfo.TABLE_NAME, columns, null, null, null, null, null);


        Log.d("Database operations", "Class table accessed");
        return CR;
    }

    public void newTable(String abc, DatabaseOperations dp1) {
        // TODO Auto-generated method stub
        SQLiteDatabase sdb = dp1.getWritableDatabase();
        tableName = abc;
        Log.d("newTable", tableName);
        CREATE_QUERY2 = "CREATE TABLE " + tableName + "(" + AppData.ClassInfo.ROLL_NO + " INTEGER," + ClassInfo.PRESENT + " INTEGER," + ClassInfo.TOTAL + " INTEGER);";
        sdb.execSQL(CREATE_QUERY2);
    }

    public void fillTable(String abc, int stre, DatabaseOperations dp1) {
        // TODO Auto-generated method stub
        int counter = 1;
        SQLiteDatabase SQ = dp1.getWritableDatabase();
        ContentValues cv = new ContentValues();

        while(counter<=stre)
        {
            cv.put(ClassInfo.ROLL_NO, counter);
            cv.put(ClassInfo.PRESENT,0);
            cv.put(ClassInfo.TOTAL,0);
            SQ.insert(abc, null, cv);
            counter++;
        }
    }

}

Aucun commentaire:

Enregistrer un commentaire