簡體   English   中英

Android SQLite首次使用:錯誤java.lang.IllegalArgumentException:列'_id'不存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM