SQL学习笔记之数据库专题(二):Android下SQL数据库开发(四)

2015-01-21 13:43:01 · 作者: · 浏览: 23
可以让项目之前的数据清掉,必须保留,所以,这需要对数据库版本号进行一定的控制和处理。那么我们来对刚刚的数据库进行升级处理

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 List findAll() {
		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", "郭女侠");
	}
}

这样就完成了对数据库升级之后的操作,我们来看下升级后的数据库内容 从图我们可以看到,之前有的数据还存在,没有清除掉,新增加的字段增加进去了,新创建的对象也