在Android開發 中,數據庫是不可缺少的。在Android開發中,用的是一種小型的嵌入式數據庫,sqllite。今天會寫兩篇關於Android開發環境下數據庫開發的文章,第一篇先介紹使用android自帶的API來實現數據庫的使用和管理以及增刪改查、數據庫升級的相關操作。
一、數據庫第一次生成
1、javabean文件的準備
package com.example.freedomsql.bean;
import java.io.Serializable;
/**
* @ClassName: Person
* @author victor_freedom ([email protected])
* @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) {
super();
this.id = id;
this.name = name;
this.number = number;
// this.nickname = nickname;
}
}
2、數據庫類的編寫
package com.example.freedomsql.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* @ClassName: FreedomDB
* @author victor_freedom ([email protected])
* @createddate 2015-1-10 下午2:49:15
* @Description: TODO
*/
public class FreedomDB extends SQLiteOpenHelper {
public FreedomDB(Context context) {
// 參數依次爲:上下文,數據庫名稱,遊標工廠一般爲NULL,數據庫版本號,升級的時候需要更改
super(context, "freedom.db", null, 1);
}
/**
* 第一次創建數據庫的時候觸發該方法
*/
@Override
public void onCreate(SQLiteDatabase db) {
//sql語句詳情請參考該系列文章第一篇
db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");
}
/**
* 數據庫版本號變化的時候觸發該方法
*/
@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類編寫
package com.example.freedomsql.db.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.freedomsql.bean.Person;
import com.example.freedomsql.db.FreedomDB;
/**
* @ClassName: PersonDao
* @author victor_freedom ([email protected])
* @createddate 2015-1-10 下午2:30:24
* @Description: TODO
*/
public class PersonDao {
private FreedomDB dbHelper;
public PersonDao(Context context) {
dbHelper = new FreedomDB(context);
}
/**
* @Title: add
* @Description:增加
* @param name
* @param number
* @throws
*/
public void add(String name, String number) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("insert into person(name,number) values (?,?)",
new Object[] { name, number });
db.close();
// 系統API
// ContentValues = values = new ContentValues();
// values.put("name",name);
// values.put("number",number);
// long id = db.insert(table(表名),null,values(數據));
// return id;
}
// /**
// * @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;
//
// }
/**
* @Title: delete
* @Description: 刪除
* @param name
* @throws
*/
public void delete(String name) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("delete from person where name=?", new Object[] { name });
// 系統API
// int number=db.delete("person","name=?",new String[]{name});
db.close();
}
/**
* @Title: updata
* @Description: 更新
* @param name
* @param newnumber
* @throws
*/
public void updata(String name, String newnumber) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("update person set number=? where name=?", new Object[] {
newnumber, name });
// 系統API
// ContentValues values = new ContentValues();
// values.put("number", newnumber);
// int num = db.update("person", values, "name=?", new String[] { name
// });
db.close();
}
/**
* @Title: find
* @Description: 查詢
* @param name
* @return
* @throws
*/
public boolean find(String name) {
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where name =?",
new String[] { name });
// 系統API
// Cursor cursor = db.query(table(表名),null,"name=?",new
// String[](name),null,null,null);
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
/**
* @Title: findAll
* @Description:查詢
* @return
* @throws
*/
public List<Person> findAll() {
List<Person> persons = new ArrayList<Person>();
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);
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("湯老闆", "110");
dao.add("郭大俠", "119");
// dao.add("湯老闆1", "110", "湯老闆");
// dao.add("郭大俠1", "119", "郭女俠");
}
}
二、數據庫升級更新
1、person類的升級,增加一個nickname字段
package com.example.freedomsql.bean;
import java.io.Serializable;
/**
* @ClassName: Person
* @author victor_freedom ([email protected])
* @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、數據庫生成類的改動
public FreedomDB(Context context) {
// 參數依次爲:上下文,數據庫名稱,遊標工廠一般爲NULL,數據庫版本號,升級的時候需要更改
super(context, "freedom.db", null, 2);
}
/**
* 數據庫版本號變化的時候觸發該方法
*/
@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類的修改
/**
* @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;
}
/**
* @Title: findAll
* @Description:查詢
* @return
* @throws
*/
public List<Person> findAll() {
List<Person> persons = new ArrayList<Person>();
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", "郭女俠");
}
}
這樣就完成了對數據庫升級之後的操作,我們來看下升級後的數據庫內容