我正在开发一个android应用程序,我有一个无法解决的问题。我希望你们能帮我。
我得到这个错误:

android.database.sqlite.SQLiteException: table FBFriends has no column named id (code 1): , while compiling: INSERT INTO FBFriends(id,name) VALUES (?,?)

你们都知道,错误是找不到桌子。但是我做了桌子。
  public DatabaseManager(Context context) {
            //referentie naar cursus
            super(context, DATABASE_NAME, null, 1);
        }

       @Override
        public void onCreate(SQLiteDatabase db) {
           //SQL for creating a new table

           Log.d(TAG, "Tabel gemaakd");
            String CREATE_DATABASE_TABLE ="CREATE TABLE Friends (id VARCHAR(255) PRIMARY KEY not null , name VARCHAR(255) )";
            db.execSQL(CREATE_DATABASE_TABLE);
       }
   @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older database if existed
        db.execSQL("DROP TABLE IF EXISTS Friends");
        Log.d(TAG, "Tabel verwijdert");
        // create new table
        this.onCreate(db);
    }

这是向数据库添加数据的函数。
private static final String TABLE_FBFriends = "Friends";
private static final String KEY_ID = "id";
private static final String KEY_Name = "name";


    private static final String[] COLUMNS = {KEY_ID,KEY_Name};
    public boolean addPersons(ArrayList<Person> listOfPersons)
    {
        Log.d(TAG, "add");
        //get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();
        Log.d(TAG, "toevoegen add");
        //create ContentValues to add key "column"/value
        for (Person p:listOfPersons) {
            Log.d(TAG, "FOREACH");
            ContentValues values = new ContentValues();
                values.put(KEY_ID, p.getId());
            Log.d(TAG, "first VALUE");
            values.put(KEY_Name, p.getName()); // get title
            Log.d(TAG, "second VALUE");
            Log.d(TAG, "add " + values.toString());
            try{
                // insert orThrow an exeption
                db.insertOrThrow(TABLE_FBFriends, null, values);
//key/value -> keys = column names/ values = column values
                }
                catch (SQLException e) {
                    Log.d(TAG,  e.toString());
                   return false;
                    }
        }
            db.close();
            return true;
        }

谢谢你们!
当做,
斯泰恩

最佳答案

因为你还有你的旧桌子,而没有新桌子。首先要看到的是,不要在创建后直接在oncreate数据库助手中更改name表。因为它只在第一次执行时创建表。如果要更改名称表,只需创建一个使用alter table query的函数,并用新的名称表更改旧的名称表。

09-27 22:50