4

既存のテーブル LOGIN に列を追加する方法。これが私のサンプルコードです。

これは私の DataBaseAdapter クラスです:

public class DataBaseHelper extends SQLiteOpenHelper
{
    public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
    {
               super(context, name, factory, version);
    }
    // Called when no database exists in disk and the helper class needs
    // to create a new one.
    @Override
    public void onCreate(SQLiteDatabase _db) 
    {
            _db.execSQL(LoginDataBaseAdapter.DATABASE_CREATE);

    }
    // Called when there is a database version mismatch meaning that the version
    // of the database on disk needs to be upgraded to the current version.
    @Override
    public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
    {
            // Log the version upgrade.
            Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");


            // Upgrade the existing database to conform to the new version. Multiple
            // previous versions can be handled by comparing _oldVersion and _newVersion
            // values.
            // The simplest case is to drop the old table and create a new one.
            _db.execSQL("DROP TABLE IF EXISTS " + "TEMPLATE");
            // Create a new one.
            onCreate(_db);
    }

これは私の LoginDataBaseAdapter です

public class LoginDataBaseAdapter 
{
        static final String DATABASE_NAME = "login.db";
        static final int DATABASE_VERSION = 1;
        public static final int NAME_COLUMN = 1;
        // TODO: Create public field for each column in your table.
        // SQL Statement to create a new database.
        static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                     "( " +"ID"+" integer primary key autoincrement,"+ "USERNAME  text,PASSWORD text); ";
        // Variable to hold the database instance
        public  SQLiteDatabase db;
        // Context of the application using the database.
        private final Context context;
        // Database open/upgrade helper
        private DataBaseHelper dbHelper;
        public  LoginDataBaseAdapter(Context _context) 
        {
            context = _context;
            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public  LoginDataBaseAdapter open() throws SQLException 
        {
            db = dbHelper.getWritableDatabase();
            return this;
        }
        public void close() 
        {
            db.close();
        }

        public  SQLiteDatabase getDatabaseInstance()
        {
            return db;
        }

        public void insertEntry(String userName,String password)
        {
           ContentValues newValues = new ContentValues();
            // Assign values for each row.
            newValues.put("USERNAME", userName);
            newValues.put("PASSWORD",password);

            // Insert the row into your table
            db.insert("LOGIN", null, newValues);
            ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
        }
        public int deleteEntry(String UserName)
        {
            //String id=String.valueOf(ID);
            String where="USERNAME=?";
            int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{UserName}) ;
           // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
            return numberOFEntriesDeleted;
        }   
        public String getSinlgeEntry(String userName1)
        {
            Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName1}, null, null, null);
            if(cursor.getCount()<1) // UserName Not Exist
            {
                cursor.close();
                return "NOT EXIST";
            }
            cursor.moveToFirst();
            String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
            cursor.close();
            return password;                
        }
        public void  updateEntry(String userName,String password)
        {
            // Define the updated row content.
            ContentValues updatedValues = new ContentValues();
            // Assign values for each row.
            updatedValues.put("USERNAME", userName);
            updatedValues.put("PASSWORD",password);

            String where="USERNAME = ?";
            db.update("LOGIN",updatedValues, where, new String[]{userName});               
        }       
}

列 FIRSTNAME (TextView から)、LASTNAME (TextView から)、DEPARTMENT (Spinner から) を追加するにはどうすればよいですか。

4

2 に答える 2

1

1 つ以上の列を追加するだけであれば、既存のテーブルを変更することもできます。たとえば、「my_new_col」という名前の新しい列を「my_table」という名前のテーブルに追加するとします。データベースのバージョン番号を 1 から 2 に更新するだけでなく、データを失うことなくテーブルのスキーマを更新できます。

...
@Override
public void onUpgrade( SQLiteDatabase db, int oldVersion, int newVersion ) {
    switch( newVersion ) {

        case 2: /* this is your new version number */

            // ... Add new column 'my_new_col' to table 'my_table'
            db.execSQL( "alter table my_table add column my_new_col" ) ;
            break ;
    }
}

それでおしまい。もちろん、その新しい列に追加の制約を定義し、新しい列が「onCreate(...)」で元のテーブルの作成に含まれるようにする必要があります。

于 2016-07-27T23:14:46.613 に答える
0

最初に SQLite データベースのバージョンを更新する必要があります。それから onUpgrade() メソッドが実行され、すべてのデータが削除されます。次に、DATABASE_CREATE 文字列で定義した新しいスキーマでテーブルが再作成されます。

したがって、これに伴う主な問題は、テーブルが削除されるため、テーブルに既に存在するデータを回復する方法を見つける必要があることです。ただし、これが発生する前に onUpgrade を実行する必要があるため、このメソッドをポイントとして使用して、必要なデータをデータベースから保存します。

static final int DATABASE_VERSION = 2;

データベース作成文字列を更新します。

于 2013-08-01T02:47:25.040 に答える