jeudi 16 juillet 2015

Android:: SQLite Error:(1)No such table

I know that this question have been asked many times but believe me I have been through all although I couldn't solve error. I already tried all the links on stackoverflow. and even all question i referred so plz suggest me solution of this problem.


Logcat

Here is my Error Log

07-16 17:48:44.231: E/SQLiteLog(14476): (1) no such table: users 07-16 17:48:44.231: D/AndroidRuntime(14476): Shutting down VM 07-16 17:48:44.231: W/dalvikvm(14476): threadid=1: thread exiting with uncaught exception (group=0x418d6ba8) 07-16 17:48:44.251: E/AndroidRuntime(14476): FATAL EXCEPTION: main 07-16 17:48:44.251: E/AndroidRuntime(14476): Process: com.edbeans.attendance, PID: 14476 07-16 17:48:44.251: E/AndroidRuntime(14476): android.database.sqlite.SQLiteException: no such table: users (code 1): , while compiling: SELECT * FROM users 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200) 07-16 17:48:44.251: E/AndroidRuntime(14476): at com.edbeans.attendance.DataBaseHelper.query(DataBaseHelper.java:160) 07-16 17:48:44.251: E/AndroidRuntime(14476): at com.edbeans.attendance.AboutUs$2.onClick(AboutUs.java:74) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.view.View.performClick(View.java:4438) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.view.View$PerformClick.run(View.java:18422) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.os.Handler.handleCallback(Handler.java:758) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.os.Handler.dispatchMessage(Handler.java:95) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.os.Looper.loop(Looper.java:136) 07-16 17:48:44.251: E/AndroidRuntime(14476): at android.app.ActivityThread.main(ActivityThread.java:5017) 07-16 17:48:44.251: E/AndroidRuntime(14476): at java.lang.reflect.Method.invokeNative(Native Method) 07-16 17:48:44.251: E/AndroidRuntime(14476): at java.lang.reflect.Method.invoke(Method.java:515) 07-16 17:48:44.251: E/AndroidRuntime(14476): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 07-16 17:48:44.251: E/AndroidRuntime(14476): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 07-16 17:48:44.251: E/AndroidRuntime(14476): at dalvik.system.NativeStart.main(Native Method)


Code Sample My DataBaseHelper class

And here is my Code:

public class DataBaseHelper extends SQLiteOpenHelper{
String DB_PATH =null;
private static String DB_NAME ="edbeansData.db";

private SQLiteDatabase myDataBase; 

private final Context myContext;
String type1 ="teacher";
 public DataBaseHelper(Context context) {

    super(context, DB_NAME, null, 3);
    this.myContext = context;
    DB_PATH="/data/data/"+context.getPackageName()+"/"+"databases/";
}   

public void createDataBase() throws IOException{

    boolean dbExist = checkDataBase();
    //SQLiteDatabase db_Read = null;
    if(dbExist){
        //do nothing - database already exist
    }else{
        this.getReadableDatabase();
        //this.close();
        //db_Read=this.getReadableDatabase(); 
        //db_Read.close();

        try {

            copyDataBase();

        } catch (IOException e) {

            throw new Error("Error copying database");

        }
    }

}

private boolean checkDataBase(){

    SQLiteDatabase checkDB = null;

    try{
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    }catch(SQLiteException e){

        //database does't exist yet.

    }

    if(checkDB != null){

        checkDB.close();
    }

    return checkDB != null ? true : false;
}

public void copyDataBase() throws IOException{

    InputStream myInput = myContext.getAssets().open(DB_NAME);
     String outFileName = DB_PATH + DB_NAME;
      OutputStream myOutput = new FileOutputStream(outFileName);
      byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }
    myOutput.flush();
    myOutput.close();
    myInput.close();

}

public void openDataBase() throws SQLException{

    //Open the database
    String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}

@Override
public synchronized void close() {

        if(myDataBase != null)
            myDataBase.close();

        super.close();

}

@Override
public void onCreate(SQLiteDatabase db) {
    //Log.e("abc","table create was called");
}


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

}

 //return cursor
public Cursor query(String table,String[] columns, String selection,String[] selectionArgs,String groupBy,String having,String orderBy){
    return myDataBase.query("users", null, null, null, null, null, null);
 }

}


## AboutUs.java class ##

public class AboutUs extends Activity {
/** Called when the activity is first created. */
Cursor c=null;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_aboutus);

//    ActionBar actionBar = getActionBar();

    // Enabling Up / Back navigation
  //  actionBar.setDisplayHomeAsUpEnabled(true);
    Button button1 =(Button)findViewById(R.id.btnview);


    button1.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {

       Intent dbmanager = new Intent(getApplicationContext(),AndroidDatabaseManager.class);
             startActivity(dbmanager);
          }
         });
    ((Button)findViewById(R.id.btninsert)).setOnClickListener(new View.OnClickListener(){


        @Override
        public void onClick(View v) {


           DataBaseHelper myDbHelper = new DataBaseHelper(AboutUs.this);

             try {

                myDbHelper.createDataBase();

        } catch (IOException ioe) {

            throw new Error("Unable to create database");

        }

        try {

            myDbHelper.openDataBase();

        }catch(SQLException sqle){

            throw sqle;

        }
        Toast.makeText(AboutUs.this, "Success", Toast.LENGTH_SHORT).show();
  }

}

Aucun commentaire:

Enregistrer un commentaire