0

I am making an app in Android Studio using java. I had created an internal database with two columns(name and productID) and everything was working just fine. when i added two more columns(Customer Name and Delivery date), it keeps crashing. The code for that activity is below as well as the logcat.

package com.kristar.busibooks;

import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import android.widget.Toast;


public class OrderActivity extends AppCompatActivity implements View.OnClickListener {

private EditText editCusTextName;
private EditText editTextName;
private EditText editTextAdd;
private EditText editDDTextName;
private Button btnAdd;
private Button btnView;
private Button btnCurrency;

private SQLiteDatabase db;

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

    createDatabase();

    editCusTextName = (EditText) findViewById(R.id.editCusTextName);
    editTextName = (EditText) findViewById(R.id.editTextName);
    editTextAdd = (EditText) findViewById(R.id.editTextpID);
    editDDTextName = (EditText) findViewById(R.id.editDDTextName);


    btnAdd = (Button) findViewById(R.id.btnAdd);
    btnView = (Button) findViewById(R.id.btnView);
    btnCurrency = (Button) findViewById(R.id.btnCurrency);

    btnAdd.setOnClickListener(this);
    btnView.setOnClickListener(this);
    btnCurrency.setOnClickListener(this);



    btnView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intentProduct = new Intent(getApplicationContext(), Products.class);
            startActivity(intentProduct);
        }
    });

    btnCurrency.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            Intent intentCurrencyConverter = new Intent(getApplicationContext(), CurrencyConverter.class);
            startActivity(intentCurrencyConverter);
        }
    });





}



protected void createDatabase(){
    db=openOrCreateDatabase("ProductDB", Context.MODE_PRIVATE, null);
    db.execSQL("CREATE TABLE IF NOT EXISTS product(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Custo_name VARCHAR, name VARCHAR,productID INT, Deli_Date DATE);");
}


protected void insertIntoDB(){
    String cus_name = editCusTextName.getText().toString().trim();
    String name = editTextName.getText().toString().trim();
    String add = editTextAdd.getText().toString().trim();
    String d_date = editDDTextName.getText().toString().trim();
    if(cus_name.equals("") || name.equals("") || add.equals("") || d_date.equals("")){
        Toast.makeText(getApplicationContext(),"Please fill all fields", Toast.LENGTH_LONG).show();
        return;
    }

    String query = "INSERT INTO product (Custo_name,name,productID,Deli_Date) VALUES('"+cus_name+"', '"+name+"', '"+add+"', '"+d_date+"');";
    db.execSQL(query);
    Toast.makeText(getApplicationContext(),"Saved Successfully", Toast.LENGTH_LONG).show();
}



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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onClick(View v) {
    if(v == btnAdd){
        insertIntoDB();
    }
}

}

06-06 05:32:15.095 2362-2362/com.kristar.busibooks I/art: Not 

late-enabling -Xcheck:jni (already on)
06-06 05:32:15.096 2362-2362/com.kristar.busibooks I/art: Late-enabling JIT
06-06 05:32:15.175 2362-2362/com.kristar.busibooks I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000
06-06 05:32:15.592 2362-2362/com.kristar.busibooks W/System: ClassLoader referenced unknown path: /data/app/com.kristar.busibooks-2/lib/x86
06-06 05:32:16.065 2362-2373/com.kristar.busibooks I/art: WaitForGcToComplete blocked for 46.015ms for cause Background
06-06 05:32:17.134 2362-2376/com.kristar.busibooks D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
06-06 05:32:17.163 2362-2373/com.kristar.busibooks I/art: Background sticky concurrent mark sweep GC freed 9565(411KB) AllocSpace objects, 0(0B) LOS objects, 31% free, 2MB/3MB, paused 120.897ms total 1.085s
06-06 05:32:17.212 2362-2362/com.kristar.busibooks D/: HostConnection::get() New Host Connection established 0xab74d8e0, tid 2362
06-06 05:32:17.448 2362-2376/com.kristar.busibooks D/: HostConnection::get() New Host Connection established 0xab74dcb0, tid 2376
06-06 05:32:17.466 2362-2376/com.kristar.busibooks I/OpenGLRenderer: Initialized EGL, version 1.4
06-06 05:32:17.645 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:17.645 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabe7f900, error=EGL_SUCCESS
06-06 05:32:18.820 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 64 frames!  The application may be doing too much work on its main thread.
06-06 05:32:24.125 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 7.568ms
06-06 05:32:24.333 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:24.333 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6d1620, error=EGL_SUCCESS
06-06 05:32:24.682 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 35.944ms
06-06 05:32:26.172 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 95 frames!  The application may be doing too much work on its main thread.
06-06 05:32:26.568 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 12.282ms
06-06 05:32:27.091 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 16.750ms
06-06 05:32:29.126 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 13.683ms
06-06 05:32:34.472 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 25.061ms
06-06 05:32:34.943 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 6.799ms
06-06 05:32:37.274 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 5.115ms
06-06 05:32:38.558 2362-2376/com.kristar.busibooks E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab755640
06-06 05:32:39.187 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 201 frames!  The application may be doing too much work on its main thread.
06-06 05:32:41.686 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 27.114ms
06-06 05:32:45.302 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:45.302 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6f0720, error=EGL_SUCCESS
06-06 05:32:45.485 2362-2376/com.kristar.busibooks E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab755640
06-06 05:32:46.455 2362-2376/com.kristar.busibooks W/EGL_emulation: eglSurfaceAttrib not implemented
06-06 05:32:46.455 2362-2376/com.kristar.busibooks W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6f0720, error=EGL_SUCCESS
06-06 05:32:46.551 2362-2376/com.kristar.busibooks E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab754920
06-06 05:32:46.703 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 77.331ms
06-06 05:32:46.739 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 37 frames!  The application may be doing too much work on its main thread.
06-06 05:32:46.830 2362-2373/com.kristar.busibooks I/art: Background partial concurrent mark sweep GC freed 4946(325KB) AllocSpace objects, 0(0B) LOS objects, 39% free, 3MB/5MB, paused 26.008ms total 568.072ms
06-06 05:32:47.154 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 37.891ms
06-06 05:32:47.737 2362-2362/com.kristar.busibooks I/Choreographer: Skipped 58 frames!  The application may be doing too much work on its main thread.
06-06 05:32:53.132 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 33.821ms
06-06 05:32:54.141 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 32.107ms
06-06 05:32:57.998 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 29.788ms
06-06 05:32:58.477 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 5.348ms
06-06 05:33:06.832 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 57.211ms
06-06 05:33:06.841 2362-2362/com.kristar.busibooks E/SQLiteLog: (1) table product has no column named Custo_name
06-06 05:33:06.842 2362-2362/com.kristar.busibooks D/AndroidRuntime: Shutting down VM
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: FATAL EXCEPTION: main
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: Process: com.kristar.busibooks, PID: 2362
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime: android.database.sqlite.SQLiteException: table product has no column named Custo_name (code 1): , while compiling: INSERT INTO product (Custo_name,name,productID,Deli_Date) VALUES('fg', 'gh', '56', '2017-11-12');
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at com.kristar.busibooks.OrderActivity.insertIntoDB(OrderActivity.java:91)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at com.kristar.busibooks.OrderActivity.onClick(OrderActivity.java:122)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
06-06 05:33:06.843 2362-2362/com.kristar.busibooks E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-06 05:33:09.908 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 7.133ms
06-06 05:33:12.921 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 43.865ms
06-06 05:33:14.574 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 7.056ms
06-06 05:33:15.794 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 14.265ms
06-06 05:33:22.451 2362-2369/com.kristar.busibooks W/art: Suspending all threads took: 13.150ms
Zoe
  • 27,060
  • 21
  • 118
  • 148
Rani8094
  • 11
  • 2
  • Did you reinstall the app after adding those columns? – Abhishek Jain Jun 06 '17 at 04:05
  • @AbhishekJain The app I'm making? No I didn't. – Rani8094 Jun 06 '17 at 04:07
  • May be this can help. [Android studio getSlotFromBufferLocked: unknown buffer error](https://stackoverflow.com/questions/32561479/android-studio-getslotfrombufferlocked-unknown-buffer-error/34224020) – Niral Patel Jun 06 '17 at 04:08
  • @Rani8094 Well can you try? Check my answer. – Abhishek Jain Jun 06 '17 at 06:16
  • I completely forgot about altering the table. The problem is I don't know where to out that query. Won't uninstalling be a much better option? I've tried searching "how to uninstall" but I cant quite get it. Where do I run the edit configuration? – Rani8094 Jun 07 '17 at 02:29

2 Answers2

1

Your table is already created without those columns when you first installed the app. You either need to upgrade your table and then add those columns or reinstall the app with the updated table schema.

Abhishek Jain
  • 3,562
  • 2
  • 26
  • 44
0

In your code,

openOrCreateDatabase()

creates new database only if the one does not exist.

and

CREATE TABLE IF NOT EXISTS

does not alter old table, it only creates a new table if it does not even exist

The app's Database or it's TABLES are not removed until your code specifies or you uninstall the app.

If you want to keep old entries

use ALTER TABLE instead,

Or you can just uninstall the app and run from Android studio then.

Vihaari Varma
  • 155
  • 11