无法更新数据库

用户名

早上好,最初我的数据库是姓名和电子邮件。但是,我现在想添加几列,以明确姓氏性别和出生日期。我从KEY_LNAME =“ lname”开始,并在需要的地方添加值,还将数据库版本从2增加到3,但这是行不通的。为什么数据库不接受更改?

public class DatabaseAdapter {
    static final String KEY_ROWID = "_id";
    static final String KEY_NAME = "name";
    static final String KEY_EMAIL = "email";
    static final String KEY_LNAME = "lname";
    static final boolean KEY_GENDER = false;
    static final String DOB = "DD-MM-YYYY";
    static final String TAG = "DBAdapter";

    static final String DATABASE_NAME = "MyDB";
    static final String DATABASE_TABLE = "contacts";
    static final int DATABASE_VERSION = 3;

    static final String DATABASE_CREATE =
        "create table contacts (_id integer primary key autoincrement, "
        + "name text not null, email text not null);";

    final Context context;

    DatabaseHelper DBHelper;
    SQLiteDatabase db;

    public DatabaseAdapter(Context ctx)
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context)
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db)
        {
            try {
                db.execSQL(DATABASE_CREATE);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS contacts");
            onCreate(db);
        }
    }

    //---opens the database---
    public DatabaseAdapter open() throws SQLException 
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---closes the database---
    public void close() 
    {
        DBHelper.close();
    }

    //---insert a contact into the database---
    public long insertContact(String name, String email, String lname) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_NAME, name);
        initialValues.put(KEY_EMAIL, email);
        initialValues.put(KEY_LNAME, lname);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //---deletes a particular contact---
    public boolean deleteContact(long rowId) 
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    //---retrieves all the contacts---
    public Cursor getAllContacts()
    {
        return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                KEY_EMAIL, KEY_LNAME}, null, null, null, null, null);
    }

    //---retrieves a particular contact---
    public Cursor getContact(long rowId) throws SQLException 
    {
        Cursor mCursor =
                db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                KEY_NAME, KEY_EMAIL, KEY_LNAME}, KEY_ROWID + "=" + rowId, null,
                null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a contact---
    public boolean updateContact(long rowId, String name, String email, String lname) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_NAME, name);
        args.put(KEY_EMAIL, email);
        args.put(KEY_LNAME, lname);
        return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }

}
斯蒂法诺·穆纳里尼(Stefano Munarini)

首先:

DB_CREATE用新值更改字符串。

然后:

onUpgrade方法中,如果oldVersion为1或2(在您的特定情况下),则执行新查询。如果您只想在现有数据库中添加一些列,建议您添加如下代码:

private final String ALTER_TABLE_ONE =
        "ALTER TABLE " + TABLE_NAME +
                " ADD " + YOUR_NEW_COLUMN + " TEXT;";
private final String ALTER_TABLE_TWO =
        "ALTER TABLE " + TABLE_NAME +
                " ADD " + YOUR_SECOND_NEW_COLUMS + " TEXT;";

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion == 1) {
        ...UPGRADE MORE COLUMNS OR SIMPLY DO WHAT YOU NEED...
    } else if (oldVersion == 2) {
        db.execSQL(ALTER_TABLE_ONE);
        db.execSQL(ALTER_TABLE_TWO);
    } else {
        // fallback if coming from unexpected db version
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS contacts");
        onCreate(db);
    }
}

execSQL每次添加新列时都必须调用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数据库无法连接或更新

来自分类Dev

由于数据库是只读的,因此无法更新数据库

来自分类Dev

如果数据库是只读的,则无法更新数据库

来自分类Dev

无法更新数据库.MDF为只读

来自分类Dev

PDO SQLite无法更新记录:“数据库已锁定”

来自分类Dev

无法从PHP中的数据库更新变量

来自分类Dev

Codeigniter更新记录-无法在数据库中更新

来自分类Dev

无法更新数据库中的对象

来自分类Dev

无法在Codeigniter中使用Ajax更新数据库

来自分类Dev

数据库更新无法在Meteor方法中运行

来自分类Dev

无法从Liquibase Java API更新数据库

来自分类Dev

实体框架无法更新数据库

来自分类Dev

无法通过Laravel更新数据库

来自分类Dev

无法更新后数据库更新当前时间戳

来自分类Dev

无法更新数据库形式的数据

来自分类Dev

无法更新数据库数据。拉拉韦尔

来自分类Dev

无法将数据更新到数据库

来自分类Dev

我无法从python更新数据库

来自分类Dev

无法更新SQL数据库

来自分类Dev

无法通过表单数据更新数据库

来自分类Dev

如果数据库是只读的,则无法更新数据库

来自分类Dev

无法更新数据库中的列

来自分类Dev

无法从MySQL数据库更新数据

来自分类Dev

无法更新数据库中的行

来自分类Dev

无法更新Kinvey数据库中的数据

来自分类Dev

无法更新数据库中的字段

来自分类Dev

无法更新我的数据库

来自分类Dev

我无法更新数据库。Symfony PHP数据库原则

来自分类Dev

Android - 我无法从 SQLite 数据库更新数据