user3314337
user3314337

Reputation: 341

Data not being inserted into Table using SQLite in Android

I would like to insert the Supplier Name, Supplier Contact Number, Supplier Address in a table containing 4 columns for id, name, number, address

unfortunately an exception is thrown during every execution. Tried going through the code, logcat. Still unable to find the problem. Any kind of help would be really appreciated.

Logcat info:

03-08 10:46:07.920  28315-28315/com.example.bharathduraiswamy.comboedittext E/SQLiteDatabase﹕ Error inserting supplier address= supplier name= supplier mobile number=
android.database.sqlite.SQLiteException: near "address": syntax error (code 1): , while compiling: INSERT INTO SUPPLIERLIST(supplier address,supplier name,supplier mobile number) VALUES (?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:886)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:497)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
        at com.example.bharathduraiswamy.comboedittext.VivzDatabaseAdapter.insertSupplier(VivzDatabaseAdapter.java:92)
        at com.example.bharathduraiswamy.comboedittext.AddSupplier.addSupplier(AddSupplier.java:269)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at android.support.v7.internal.view.SupportMenuInflater$InflatedOnMenuItemClickListener.onMenuItemClick(SupportMenuInflater.java:255)
        at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
        at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:949)
        at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:939)
        at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:596)
        at android.support.v7.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:145)
        at android.view.View.performClick(View.java:4213)
        at android.view.View$PerformClick.run(View.java:17448)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:153)
        at android.app.ActivityThread.main(ActivityThread.java:5336)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
        at dalvik.system.NativeStart.main(Native Method)

Helper class code:

    public long insertSupplier(String suppName, String suppNumber, String suppAddress) {
    SQLiteDatabase db = helper.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(VivzHelper.COLUMN_SUPPLIER_NAME, suppName);
    contentValues.put(VivzHelper.COLUMN_SUPPLIER_MOBILE_NUMBER, suppNumber);
    contentValues.put(VivzHelper.COLUMN_SUPPLIER_ADDRESS, suppAddress);
    long supplier_id = db.insert(VivzHelper.TABLE_NAME_SUPPLIER, null, contentValues);
    db.close();
    return supplier_id;
}

Table data for Supplier List:

        private static final String TABLE_NAME_SUPPLIER = "SUPPLIERLIST";
    private static final String COLUMN_SUPPLIER_UID = "supplier_id";
    private static final String COLUMN_SUPPLIER_NAME = "supplier name";
    private static final String COLUMN_SUPPLIER_MOBILE_NUMBER = "supplier mobile number";
    private static final String COLUMN_SUPPLIER_ADDRESS = "supplier address";
    private static final String CREATE_TABLE_SUPPLIER =
            "CREATE TABLE " + TABLE_NAME_SUPPLIER + "( " + COLUMN_SUPPLIER_UID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                    " " + COLUMN_SUPPLIER_NAME + " VARCHAR(255)," +
                    " " + COLUMN_SUPPLIER_MOBILE_NUMBER + " VARCHAR(255)," +
                    " " + COLUMN_SUPPLIER_ADDRESS + " VARCHAR(255));";

    private static final String DROP_TABLE_SUPPLIER = "DROP TABLE IF EXISTS" + TABLE_NAME_SUPPLIER;

addSupplier method inside MainActivity.java

   public void addSupplier(MenuItem item) {
    String suppName = supplierName.getText().toString();
    String suppNumber = supplierNumber.getText().toString();
    String suppAddress = supplierAddress.getText().toString();

    long id = vivzHelper.insertSupplier(suppName,suppNumber,suppAddress);
    if (id < 0) {
        Message.message(this, "Inserting a Row was unsuccessful");
    } else {
        Message.message(this, "Successfully inserted a Row");
    }
    //category.setText(""); clears the EditText's existing user fed data
    supplierName.setText("");
    supplierNumber.setText("");
    supplierAddress.setText("");
}

I am making use of menu items in action bar to pass the data from three EditText to SQLite database.

Upvotes: 3

Views: 839

Answers (2)

Jalal Najafi
Jalal Najafi

Reputation: 11

i think your variable doesn't define correctly

private static final String TABLE_NAME_SUPPLIER = "SUPPLIERLIST";
private static final String COLUMN_SUPPLIER_UID = "supplier_id";
private static final String COLUMN_SUPPLIER_NAME = "supplier_name";
private static final String COLUMN_SUPPLIER_MOBILE_NUMBER = "supplier_mobile_number";
private static final String COLUMN_SUPPLIER_ADDRESS = "supplier_address";
private static final String CREATE_TABLE_SUPPLIER =
        "CREATE TABLE " + TABLE_NAME_SUPPLIER + "( " +COLUMN_SUPPLIER_UID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                " " + COLUMN_SUPPLIER_NAME + " VARCHAR(255)," +
                " " + COLUMN_SUPPLIER_MOBILE_NUMBER + " VARCHAR(255)," +
                " " + COLUMN_SUPPLIER_ADDRESS + " VARCHAR(255));";

for insert use blew sample code

public void addSupplier (Supplier supplier)
{
            //for logging
    Log.d("add", supplier.toString());

     // 1. get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();

    // 2. create ContentValues to add key "column"/value
    ContentValues values = new ContentValues();
    values.put(COLUMN_SUPPLIER_NAME, supplier.getSUPPLIER_NAME()); 
    values.put(COLUMN_SUPPLIER_ADDRESS, supplier.getSUPPLIER_ADDRESS());

            values.put(COLUMN_SUPPLIER_MOBILE_NUMBER, supplier.getSUPPLIER_MOBILE_NUMBER());

    // 3. insert
    db.insert(TABLE_NAME_SUPPLIER, // table
            null, //nullColumnHack
            values); // key/value -> keys = column names/ values = column values

    // 4. close
    db.close();
}

Upvotes: 0

Milad Faridnia
Milad Faridnia

Reputation: 9477

Just change your column names to this :

 private static final String COLUMN_SUPPLIER_NAME = "supplier_name";
private static final String COLUMN_SUPPLIER_MOBILE_NUMBER = "supplier_mobile_number";
private static final String COLUMN_SUPPLIER_ADDRESS = "supplier_address";

you ave used spaces between your column names. That's your problem.

Upvotes: 1

Related Questions