1、person类的升级,增加一个nickname字段
package com.example.freedomsql.bean;
import java.io.Serializable;
/**
* @ClassName: Person
* @author victor_freedom (x_freedom_reddevil@126.com)
* @createddate 2015-1-10 下午4:22:09
* @Description: TODO
*/
public class Person implements Serializable {
private int id;
private String name;
private String number;
private String nickname;
public Person(int id, String name, String number, String nickname) {
super();
this.id = id;
this.name = name;
this.number = number;
this.nickname = nickname;
}
}
2、数据库生成类的改动
1、将版本号更改为2 public FreedomDB(Context context) {
// 参数依次为:上下文,数据库名称,游标工厂一般为NULL,数据库版本号,升级的时候需要更改
super(context, "freedom.db", null, 2);
}
2、在onUpgrade方法中进行处理,在实际开发中,特别需要对版本号进行逻辑处理。
/**
* 数据库版本号变化的时候触发该方法
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
if (oldversion == 1 && newversion == 2) {
db.execSQL("alter table person add nickname varchar(20)");
}
}
3、Dao类的修改
1、增加方法的改动/**
* @Title: add
* @Description: 升级后的增加方法
* @param name
* @param number
* @param nickname
* @throws
*/
public void add(String name, String number, String nickname) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("insert into person(name,number,nickname) values (?,?,?)",
new Object[] { name, number, nickname });
db.close();
// 系统API
// ContentValues = values = new ContentValues();
// values.put("name",name);
// values.put("number",number);
// long id = db.insert(table(表名),null,values(数据));
// return id;
}
2、查询方法的改动
/** * @Title: findAll * @Description:查询 * @return * @throws */ public ListfindAll() { List persons = new ArrayList (); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person", null); // 系统API // Cursor cursor= db.query("Person",new // String[]{"name","id","number"},null,null,null,null,null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); String number = cursor.getString(cursor.getColumnIndex("number")); String nickname = cursor.getString(cursor .getColumnIndex("nickname")); Person p = new Person(id, name, number,nickname); persons.add(p); } cursor.close(); db.close(); return persons; }
4、主Activity的修改
package com.example.freedomsql;
import com.example.freedomsql.db.dao.PersonDao;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PersonDao dao = new PersonDao(getBaseContext());
dao.add("汤老板1", "110", "汤老板");
dao.add("郭大侠1", "119", "郭女侠");
}
}
这样就完成了对数据库升级之后的操作,我们来看下升级后的数据库内容
从图我们可以看到,之前有的数据还存在,没有清除掉,新增加的字段增加进去了,新创建的对象也