我是android的新手,我创建了SQLite数据库,当我尝试插入数据时,它会崩溃和logcat:
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:表项没有名为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(Native Method) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.database.sqlite.SQLiteCompiledSql。(SQLiteCompiledSql.java:68) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在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):在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):在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):在android.app.Activity.performCreate(Activity.java:4465) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.app.ActivityThread.startActivityNow(ActivityThread.java:1797) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.widget.TabHost $ IntentContentStrategy.getContentView(TabHost.java:682) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.widget.TabHost.setCurrentTab(TabHost.java:346) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在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):在android.view.View.performClick(View.java:3511) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.view.View $ PerformClick.run(View.java:14105) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在android.os.Handler.handleCallback(Handler.java:605) 09-04 10:44:20.671:E / SQLiteDatabase(7026):在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):在android.app.ActivityThread.main(ActivityThread.java:4424) 09-04 10:44:20.671:E / SQLiteDatabase(7026):at java.lang.reflect.Method.invokeNative(Native Method) 09-04 10:44:20.671:E / SQLiteDatabase(7026):at 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):at 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);
答案 0 :(得分: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());
答案 1 :(得分:0)
您的列名定义为public static final String ITEM_PRICE = "itemPrice";
,之后您尝试插入values.put("ITEM_PRICE", item.getPrice());
您应该使用静态常量,而不是常量的名称:
values.put(ItemsDbHelper.ITEM_PRICE, item.getPrice());
答案 2 :(得分: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();
}
代替你的createItem()方法