![](/img/trans.png)
[英]Android SQLite java.lang.IllegalArgumentException: column '_id' does not exist
[英]Android SQLite first use: Error java.lang.IllegalArgumentException: column '_id' does not exist
我知道,已經有很多答案了。 但是我還是使用SQLite的新手,我嘗試了這些答案所說的內容,但無濟於事。
它說我的列ID不存在,但確實存在:
public class SQLite extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "OMDBAPI";
// Films table name
static final String TABLE_FILMS = "films";
// Contacts Table Columns names
static final String KEY_TITLE = "Title";
static final String KEY_YEAR = "Year";
static final String KEY_RELEASED = "Released";
static final String KEY_RUNTIME = "Runtime";
static final String KEY_GENRE = "Genre";
static final String KEY_DIRECTOR = "Director";
static final String KEY_WRITER = "Writer";
static final String KEY_ACTORS = "Actors";
static final String KEY_PLOT = "Plot";
static final String ID = "_id";
public SQLite(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_FILMS_TABLE = "CREATE TABLE " + TABLE_FILMS +"(" +
ID + "integer primary key autoincrement," +
KEY_TITLE + " TEXT, " +
KEY_YEAR + " TEXT, " +
KEY_RELEASED + " TEXT, " +
KEY_RUNTIME + " TEXT, " +
KEY_GENRE + " TEXT, " +
KEY_DIRECTOR + " TEXT, " +
KEY_WRITER + " TEXT, " +
KEY_ACTORS + " TEXT, " +
KEY_PLOT + " TEXT" +
");";
db.execSQL(CREATE_FILMS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_FILMS);
// Create tables again
onCreate(db);
}
}
我嘗試將其填充到列表視圖中:
public class Query extends Activity {
private ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view);
DBController crud = new DBController(getBaseContext());
Cursor cursor = crud.loadData();
String[] titles = new String[] {SQLite.ID, SQLite.KEY_TITLE};
int[] idViews = new int[] {R.id.idnumber, R.id.grid_title};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(),
R.layout.adapter_layout,cursor,titles,idViews, 0);
list = (ListView)findViewById(R.id.listView);
list.setAdapter(adapter);
}
}
這是我的數據庫控制器(新手錯誤?我也應該在此處輸入ID嗎?):
public class DBController {
private SQLiteDatabase db;
private SQLite bank;
String success = "Film saved.";
String failed = "There was a problem saving the movie.";
public DBController(Context context){
bank = new SQLite(context);
}
public String insertData(String title, String release, String year, String writers, String actors, String director, String genre, String plot, String runtime){
ContentValues values;
long result;
db = bank.getWritableDatabase();
values = new ContentValues();
// Insert values
values.put(SQLite.KEY_TITLE, title);
values.put(SQLite.KEY_YEAR, release);
values.put(SQLite.KEY_RELEASED, release);
values.put(SQLite.KEY_YEAR, year);
values.put(SQLite.KEY_GENRE, genre);
values.put(SQLite.KEY_DIRECTOR, director);
values.put(SQLite.KEY_WRITER, writers);
values.put(SQLite.KEY_ACTORS, actors);
values.put(SQLite.KEY_PLOT, plot);
values.put(SQLite.KEY_RUNTIME, runtime);
result = db.insert(SQLite.TABLE_FILMS, null, values);
db.close();
if (result ==-1)
return failed;
else
return success;
}
public Cursor loadData(){
Cursor cursor;
String[] fields = {bank.KEY_TITLE,bank.KEY_RELEASED};
db = bank.getReadableDatabase();
cursor = db.query(bank.TABLE_FILMS, fields, null, null, null, null, null, null);
if(cursor!=null){
cursor.moveToFirst();
}
db.close();
return cursor;
}
}
有人可以幫我找出為什么沒有ID列的原因嗎?
(為什么ppl拒絕投票?我認為Stack Overflow可以幫助像我這樣的白痴= P)
您沒有_id
列,沒有_idinteger
因為您忘記在CREATE查詢中放置空格。 換線
ID + "integer primary key autoincrement," +
至
ID + " integer primary key autoincrement," +
您可以使用提供主鍵字段(稱為_ID
)的baseColums接口。
谷歌的例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.