2014-09-04 3 views
0

Я новичок в Android, я создал базу данных SQLite, и когда я пытаюсь вставить данные он выходит из строя и LogCat:Android SQLite Ошибка вставки данных

09-04 10: 44: 20.671: E/SQLiteDatabase (7026): Ошибка ввода ITEM_ID = 0 ITEM_PRICE = 50 ITEM_DETAILS = Информация о еде 0 ITEM_IMG = image0 ITEM_NAME = Название питания 0 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): android.database.sqlite.SQLiteException: table items не имеет столбца с именем ITEM_PRICE: при компиляции: INSERT INTO (ITEM_ID, ITEM_PRICE, ITEM_DETAILS, ITEM_IMG, ITEM_NAME) ЦЕННОСТИ (?,?,?,?,?) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.database.sqlite.SQLiteCompiledSql.native_compile (собственный метод) 0 9-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.database.sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:68) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.database.sqlite.SQLiteProgram.compileSql (SQLiteProgram.java:143) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs (SQLiteProgram.java:361) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): на android.database.sqlite.SQLiteStatement.acquireAndLock (SQLiteStatement.java:260) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026) : at android.database.sqlite.SQLiteStatement.executeInsert (SQLiteStatement.java:112) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): на android.database.sqlite.SQLiteDatabase.insertWithOnConflict (SQLiteDatabase.java: 1718) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.database.sqlite.SQLiteDatabase.insert (SQLiteDatabase.java:1591) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at com.starware.emenu.database.ItemsDataSource.createItem (ItemsDataSource.java: 58) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at com.starware.emenu.main.Tab2.setListData (Tab2.java:82) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at com.starware.emenu.main.Tab2.onCreate (Tab2.java:53) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.Activity.performCreate (Activity.java:4465) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1051) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1920) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.ActivityThread.startActivityNow (ActivityThread.java:1797) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.LocalActivityManager.moveToState (LocalActivityManager.java: 135) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.LocalActivityManager.startActivity (LocalActivityManager.java:347) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026) : at android.widget.TabHost $ IntentContentStrategy.getContentView (TabHost.java:682) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.widget.TabHost.setCurrentTab (TabHost.java:346) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.widget.TabHost $ 2.onTabSelectionChanged (TabHost.java:150) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): в android.widget.TabWidget $ TabClickListener.onClick (TabWidget.java:540) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.view.View.performClick (View.java:3511) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.view.View $ PerformClick.run (View.java:14105) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.os.Handler.handleCallback (Handler.java:605) 09 -04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.os.Handler.dispatchMessage (Handler.java:92) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): на android. os.Looper.loop (Looper.java:137) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at android.app.ActivityThread.main (ActivityThread.java:4424) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at java.lang.reflect.Method.invokeNative (собственный метод) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): в java.lang.reflect.Method.invoke (Method.java:511) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 825) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:592) 09-04 10: 44: 20.671: E/SQLiteDatabase (7026): в dalvik.system.NativeStart.main (Native Method)

Вот мои ItemsDataSource.class

public class ItemsDataSource { 

    public Context context; 
    public SQLiteDatabase database; 
    public ItemsDbHelper dbHelper; 
    public String[] allItemColumns = { ItemsDbHelper.ITEM_ID, 
      ItemsDbHelper.ITEM_NAME, ItemsDbHelper.ITEM_DETAILS, ItemsDbHelper.ITEM_IMG, ItemsDbHelper.ITEM_PRICE }; 


    public ItemsDataSource(Context context) { 
     dbHelper = new ItemsDbHelper(context); 
     this.context = context; 

    } 

    public void open() throws SQLException{ 
     dbHelper = new ItemsDbHelper(context); 
     database = dbHelper.getWritableDatabase(); 
    } 

    public synchronized void close() { 
     if(database != null){ 
      database.close(); 
     dbHelper.close(); 
     } 

    } 

    public void createItem(ListItem item) { 

     System.out.print("in create car method "); 
     Cursor cursor ; 
     ContentValues values = new ContentValues(); 
     values.put("ITEM_ID", item.getItemId()); 
     values.put("ITEM_NAME", item.getItemName()); 
     values.put("ITEM_DETAILS", item.getDetails()); 
     values.put("ITEM_IMG", item.getImage()); 
     values.put("ITEM_PRICE", item.getPrice()); 

     ListItem newItem; 

      long insertId = database.insert(
        ItemsDbHelper.TABLE_ITEMS, null,values); 
      cursor = database.query(ItemsDbHelper.TABLE_ITEMS, 
        allItemColumns, "ITEM_ID" + " = " + insertId, 
        null, null, null, null); 
      cursor.moveToFirst(); 
      newItem = cursorToItem(cursor); 
      Log.v("createItem.item_id ", newItem.getItemId()+""); 
      Log.v("createItem.item_naame ", newItem.getItemName()); 
      Log.v("createItem.item_serail ", newItem.getDetails()); 
      //Log.v("createItem.item_ph ", newItem.getPrice()); 
      Log.v("createItem.item_dev ", newItem.getImage()); 
      cursor.close(); 
    } 


    private ListItem cursorToItem(Cursor cursor) { 
     ListItem item = new ListItem(); 
     item.setItemId(cursor.getInt(0)); 
     item.setItemName(cursor.getString(1)); 
     item.setDetails(cursor.getString(2)); 
     item.setImage(cursor.getString(3)); 
     item.setPrice(cursor.getInt(4)); 
     //close(); 
     return item; 
    } 

    public int deleteItem(ListItem item) { 
     int itemId = item.getItemId(); 
     //close(); 
     return database.delete(ItemsDbHelper.TABLE_ITEMS, "ITEM_ID" 
       + " = " + itemId, null); 
    } 

    public void deleteAll() 
    { 
     SQLiteDatabase db = dbHelper.getWritableDatabase(); // helper is object extends SQLiteOpenHelper 
     db.delete(ItemsDbHelper.TABLE_ITEMS, null, null); 
    } 



    } 

Мои ItemsDbHelper.class

public class ItemsDbHelper extends SQLiteOpenHelper { 

public static final String TABLE_ITEMS = "items"; 
public static final String ITEM_ID = "item_id"; 
public static final String ITEM_NAME = "itemName"; 
public static final String ITEM_DETAILS = "itemDetails"; 
public static final String ITEM_IMG = "itemImg"; 
public static final String ITEM_PRICE = "itemPrice"; 


static final String DATABASE_NAME = "items.db"; 
private static final int DATABASE_VERSION = 10 ; 


// Database creation sql statement 

private static final String ITEM_CREATE = "create table " 
     + TABLE_ITEMS + " (" + ITEM_ID 
     + " integer primary key autoincrement , " 
     + ITEM_NAME + " TEXT NOT NULL , " 
     + ITEM_DETAILS + " TEXT NOT NULL, " 
     + ITEM_IMG + " TEXT NOT NULL , " 
     + ITEM_PRICE + " TEXT NOT NULL)"; 


public ItemsDbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase database) { 
    try { 
     database.execSQL(ITEM_CREATE); 

    } catch (Exception ex) { 
     System.out.println(ex.getMessage()); 
    } 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w(ItemsDbHelper.class.getName(), 
      "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS); 
    onCreate(db); 
    } 
    } 

ОБНОВЛЕНО < < < < < Я решил проблему аварии, именно на этом коде, я просто удалил его, я не знаю, что случилось с ним.

newItem = cursorToItem(cursor); 
+1

Почему вы вставляете в автоинкремент cloumn? он автоматически заполняет столбец. Попробуйте удалить: values.put ("ITEM_ID", item.getItemId()); – speedDeveloper

ответ

0

, пожалуйста, проверьте свой метод createItem. пожалуйста, проверьте код, я думаю, вы получите свою ошибку.

ContentValues values = new ContentValues(); 
    values.put(ItemsDbHelper.ITEM_ID, item.getItemId()); 
    values.put(ItemsDbHelper.ITEM_NAME, item.getItemName()); 
    values.put(ItemsDbHelper.ITEM_DETAILS, item.getDetails()); 
    values.put(ItemsDbHelper.ITEM_IMG, item.getImage()); 
    values.put(ItemsDbHelper.ITEM_PRICE, item.getPrice()); 
+0

Я сделал это, и все та же ошибка – user3585658

+0

попытайтесь установить приложение. –

+0

проверить мое редактирование .. – user3585658

0

Ваше имя столбца определяется как public static final String ITEM_PRICE = "itemPrice";, после того, что вы пытаетесь вставить как values.put("ITEM_PRICE", item.getPrice());

Вы должны использовать статические константы, а не имя константы:

values.put(ItemsDbHelper.ITEM_PRICE, item.getPrice()); 
+0

я сделал это еще ту же ошибку – user3585658

+0

вы должны сделать это для всех значений – mihail

+0

проверить мои изменения .. – user3585658

0

использование этого метод:

public void createItem(ListItem item) { 

    System.out.print("in create car method "); 
    Cursor cursor ; 
    ContentValues values = new ContentValues(); 
    values.put(ItemsDbHelper.ITEM_ID, item.getItemId()); 
    values.put(ItemsDbHelper.ITEM_NAME, item.getItemName()); 
    values.put(ItemsDbHelper.ITEM_DETAILS, item.getDetails()); 
    values.put(ItemsDbHelper.ITEM_IMG, item.getImage()); 
    values.put(ItemsDbHelper.ITEM_PRICE, item.getPrice()); 

    ListItem newItem; 

     long insertId = database.insert(
       ItemsDbHelper.TABLE_ITEMS, null,values); 
     cursor = database.query(ItemsDbHelper.TABLE_ITEMS, 
       allItemColumns, "ITEM_ID" + " = " + insertId, 
       null, null, null, null); 
     cursor.moveToFirst(); 
     newItem = cursorToItem(cursor); 
     Log.v("createItem.item_id ", newItem.getItemId()+""); 
     Log.v("createItem.item_naame ", newItem.getItemName()); 
     Log.v("createItem.item_serail ", newItem.getDetails()); 
     //Log.v("createItem.item_ph ", newItem.getPrice()); 
     Log.v("createItem.item_dev ", newItem.getImage()); 
     cursor.close(); 
} 

в месте вашего созданияItem() methode

Смежные вопросы