2015-03-08 4 views
2

Я хотел бы вставить Наименование поставщика, поставщик контактный телефон, поставщика Адрес в таблице, содержащей 4 колонки для ид, имя, номер, адресДанные не вставляются в таблицу с использованием SQLite в Android

, к сожалению, исключение составляет бросается во время каждого исполнения. Пробовал пройти код, logcat. Все еще не удается найти проблему. Будем очень благодарны за любую помощь.

Logcat информация:

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 Код класса:

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; 
} 

Таблица данных для списка поставщика:

 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 внутри 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(""); 
} 

Я использую пункты меню в панели действий для передачи данных из трех баз данных EditText в SQLite.

+0

просто наблюдение ... вы передаете 'suppName, suppNumber, suppAddress' в' insertSupplier' в 'MainActivity', но порядок, упомянутый в ошибке для этих столбцов, различается ... – Tirath

+1

Вы использовали пробел между вашими переменными, вы должны удалить все эти пробелы, например, вы должны изменить« адрес поставщика »на' поставщик_адрес' –

+0

Удалить эти пробелы в столбце имена вашей таблицы или использовать двойные кавычки с ними в вашем запросе – Abhi

ответ

1

Просто измените имена столбцов на это:

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"; 

вы Аве использовали пробелы между вашими именами столбцов. Это твоя проблема.

0

я думаю, что ваша переменная не правильно определить

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));"; 

для вставки взрывали образец кода

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(); 
} 
Смежные вопросы