0
我想填充我從我的數據庫中的數據列表視圖,但是當我嘗試這樣做,它只是給我一個例外,即如果不通過Simplecursor適配器來填充的ListView
"04-27 13:15:51.139: E/AndroidRuntime(2575): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist"
不管我用什麼適配器或者我得到這個例外。
這是我SQLiteOpenHelper
:
public class MySQLiteHelper extends SQLiteOpenHelper {
// Table Names
public static final String TABLE_USER_MASTER = "USER_MASTER";
public static final String TABLE_ORDER_MASTER = "ORDER_MASTER";
public static final String TABLE_ORDER_DETAILS = "ORDER_DETAILS";
// Database Details
public static String DB_NAME = "ezeefood.db";
public static String DB_PATH = "/data/data/com.project.menuApp";
public static final int DATABASE_VERSION = 4;
// User Detail Columns
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "Name";
public static final String KEY_ADDRESS = "Address";
public static final String KEY_PHONE = "PhoneNo";
public static final String KEY_USERNAME = "userid";
public static final String KEY_PASSWORD = "password";
// Order Master Columns
public static final String ORDER_ID = "order_id";
public static final String ORDER_DATE = "date";
public static final String ORDER_TIME = "time";
// Order Detail Columns
public static final String ORDER_DETAIL_ID = "order_detail_id";
public static final String ORDER_ITEM_NAME = "item_name";
public static final String ORDER_ITEM_RATE = "item_rate";
public static final String ORDER_ITEM_QTY = "item_qty";
public static final String ORDER_ID_FINAL = "order_Id";
private SQLiteDatabase sqLiteDatabase;
private static final String SCRIPT_CREATE_TABLE_USER_MASTER = "CREATE TABLE "
+ TABLE_USER_MASTER + "(" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_USERNAME + " VARCHAR UNIQUE, "
+ KEY_PASSWORD + " VARCHAR," + KEY_NAME + " VARCHAR,"
+ KEY_ADDRESS + " VARCHAR," + KEY_PHONE + " VARCHAR);";
private static final String SCRIPT_CREATE_TABLE_ORDER_MASTER = "CREATE TABLE "
+ TABLE_ORDER_MASTER + "(" + ORDER_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_USERNAME + " VARCHAR, "
+ ORDER_DATE + " VARCHAR," + ORDER_TIME +" VARCHAR);";
private static final String SCRIPT_CREATE_TABLE_ORDER_DETAILS = "CREATE TABLE "
+ TABLE_ORDER_DETAILS + "(" + ORDER_DETAIL_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + ORDER_ID_FINAL + " INTEGER, "
+ ORDER_ITEM_NAME + " VARCHAR," + ORDER_ITEM_RATE + " FLOAT,"
+ ORDER_ITEM_QTY + " INTEGER DEFAULT 1);";
public MySQLiteHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(SCRIPT_CREATE_TABLE_USER_MASTER);
database.execSQL(SCRIPT_CREATE_TABLE_ORDER_MASTER);
database.execSQL(SCRIPT_CREATE_TABLE_ORDER_DETAILS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER_MASTER);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ORDER_MASTER);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ORDER_DETAILS);
onCreate(db);
}
}
而這正是我試圖填充通過簡單的鼠標適配器列表視圖我。
public class FinalOrder extends ListActivity {
Cursor cursor;
long orderId;
private SQLiteDatabase mDatabase;
private MySQLiteHelper mDbhelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.orderdetails);
Bundle c = getIntent().getExtras();
orderId = c.getLong("orderID");
mDbhelper = new MySQLiteHelper(this);
mDatabase = mDbhelper.getReadableDatabase();
cursor = mDatabase.query(MySQLiteHelper.TABLE_ORDER_DETAILS, new String [] {MySQLiteHelper.ORDER_ITEM_NAME,
MySQLiteHelper.ORDER_ITEM_QTY,MySQLiteHelper.ORDER_ITEM_RATE}, "order_Id = ?",
new String[]{String.valueOf(orderId)}, null, null, null);
startManagingCursor(cursor);
String[] from = new String[] {MySQLiteHelper.ORDER_ITEM_NAME,MySQLiteHelper.ORDER_ITEM_QTY,MySQLiteHelper.ORDER_ITEM_RATE};
int[] to = new int[] {R.id.tv_listItemName,R.id.tv_listItemQTY,R.id.tv_listItemPrice};
ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.orderlist_row,cursor,from,to);
setListAdapter(adapter);
}
}
我不知道爲什麼沒有給出這樣的一個例外,我沒有列在我訪問我的表名「_id」。請幫忙。謝謝!
我記得特別詳細,因爲它需要_id,但看着爲SimpleCursorAdapter的文件,它不會在任何地方說,它的需要......但它是。 – JoxTraex 2012-04-27 08:12:35
嗯真的沒有SimpleCursorAdapter關於這方面的文檔。它在[CursorAdapter](http://developer.android.com/reference/android/widget/CursorAdapter.html)然而(那是超類) – zapl 2012-04-27 08:29:14
很好找,謝謝澄清! – JoxTraex 2012-04-27 08:30:33