这里我们以新建数据库存储用户名和密码为例。
数据库的类基于SQLiteOpenHelper。 设置数据库的名字(MyStocks.db)、表格的名字(user)、创建表格的语句为全局变量。在新建表格的语句中,可以看到格式为“Create tabel" + 表格名称+表头。其中表头的第一列最好为id,因为数据库会自动生成递增的id。之后则可以设置其他表头及其数据格式要求。这里我们设置了name(最长为20位的字符串。且用户名不得重复),email(最长为20位的字符串),password(最长为20位的字符串)这三个表头。在dbmanage的方法类中,设置1为数据库的初始版本号。我们将创建表格的方法写在onCreare方法中:db.execSQL(CREATE_TBL)。
public class dbmanage extends SQLiteOpenHelper {
private static final String DB_NAME = "MyStocks.db";
private static final String TBL_NAME = "user";
private static final String CREATE_TBL = "create table user " +
"(id integer primary key autoincrement,name varchar(20) unique,email varchar(20),password varchar(20))";
private SQLiteDatabase db;
public dbmanage(Context context) {
super(context, DB_NAME, null, 1);
}
public dbmanage(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TBL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion < newVersion){
.......
}
}
public void open() {
db = getWritableDatabase();
}
public void close(){
if (db != null){
db.close();
}
}
在数据中的基本操作包括:
//新建表格,CREATE_TBL为预先写好的完整语句
db.execSQL(CREATE_TBL);
//插入新数据
db.execSQL("insert into user values(null,?,?,?)",new String []{user.getUserName(),user.getEmail(),user.getPassword()});
//查询数据,查询name为指定值的数据
Cursor c = db.rawQuery("select * from user where name='"+UserName+"'", null);
String username,email,password;
while (c.moveToNext()) {
String id = c.getString(0);
username = c.getString(1);
email= c.getString(2);
password = c.getString(3);
}
//获取整个表的数据
Cursor c = db.query("user", new String[]{"id", "name","email","password"}, null, null, null, null, null);
//删除指定数据
int deleteCount = db.delete(TBL_NAME, "name=?", new String[] { name + "" });
在onCreate方法中建表只有在新环境中第一次运行时才可以,后续再加表则不会运行。那么就需要在onUpgrade中进行更新。
我们定义新的建表语句建立collect的表格。同时需要将dbmanage方法类中的版本号加1变为2。此使数据库可以检测到数据库版本又改变,在onUpgrade方法中执行新建表的语句。
private static final String TBL_NAME_collect = "collect";
private static final String CREATE_TBL_collect = "create table collect (id integer primary key autoincrement,symbol varchar(20))";
public dbmanage(Context context) {
super(context, DB_NAME, null, 2);
}
public dbmanage(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, 2);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion < newVersion){
db.execSQL(CREATE_TBL_collect);
}
}