无法更新数据库

用户名

早上好,最初我的数据库是姓名和电子邮件。但是,我现在想添加几列,以明确姓氏性别和出生日期。我从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

无法从MySQL数据库更新数据

来自分类Dev

无法更新数据库中的对象

来自分类Dev

无法通过Laravel更新数据库

来自分类Dev

数据库无法连接或更新

来自分类Dev

实体框架无法更新数据库

来自分类Dev

我无法从python更新数据库

来自分类Dev

无法更新SQL数据库

来自分类Dev

无法更新数据库中的列

来自分类Dev

无法更新数据库中的行

来自分类Dev

无法更新数据库中的字段

来自分类Dev

无法更新我的数据库

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

无法将数据更新到数据库

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

无法从Liquibase Java API更新数据库