Android中SQLite的使用

创建数据库需要继承SQLiteOpenHelper,并且手动实现构造方法:传入上下文对象,实现在activity创建对象
public DBHelper(Context context){
	//需要super的构造方法,实现数据库信息的设置
	/**
	 * 参数1:Context 用于访问应用内部存储区,数据库默认放在此处
	 * 参数2:创建或打开数据看的文件名称
	 * 参数3:用于在获取数据时,返回游标cursor的工厂,对于sqlite,可以为null
	 * 参数4:当前应用程序对应的数据库最新的版本号,这个版本可能与数据库文件中的版本不同
	 */
	super(context,"app.db",null,1);
}
/**
 *当第一次程序进行数据库创建之后,会调用这个方法,用于创建数据库表及初始化数据;
 * 当数据库创建成功,这个方法就不会再执行了,除非数据库清空;
 * @param db 创建好的数据库对象
 */
@Override
public void onCreate(SQLiteDatabase db) {
	//1,在库中创建表
	db.execSQL(CREATE_STUDENTS);
	db.execSQL(CREATE_TEACHER);
}

/**
 * 当数据库版本提高之后,就需要回调这个方法,系统自动回调
 * @param db
 * @param oldVersion    数据库文件中当前的版本信息
 * @param newVersion    构造方法中,指定的版本信息
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	Log.d("dbhelper",""+oldVersion+","+newVersion);
	// TODO: 通常在这个方法添加、修改、删除数据库表
	if(newVersion==3){
		//3代表添加教师表
		db.execSQL(CREATE_TEACHER);
	}else if(newVersion==4){
		//代表向teachrers添加email字段
		db.execSQL(UP_TEACHERS_V4);
	}
}
    SQLiteOpenHelper的子类创建完成之后,实现数据库的连接:
1)在activity中创建该子类的对象,并且传入上下文参数this,用于打开数据库,没有会自动创建,
2)利用该子类对象调用getWritableDatabase()方法,获取数据库的可读写的对象,当此方法第一次调用时,会自动创建数据库对象,打开数据库,并回调子类当中onCreate方法;
3)返回的SQLiteDatabase类型的对象,就可以对数据库进行增删改查的操作
这样就完成了数据库的连接;


注意事项:
默认情况下,onCreate方法,应该创建内容和构造方法中指定版本号代表的内容一致,因为有可能用户以前没有执行过
程序,自定创建数据库,因此要包含onUpgrade的对应版本操作;
默认不要依赖于onUpgrade,onUpgrade主要针对旧版本升级用的;
通常onUpgrade在内部不建议删除表(drop table),否则用户数据就没了;可以采用给数据库表添加字段的形式,进行扩展



增:


long l = db.insert("students", null, values);
参数1:将要添加数据的数据表;
参数2:可以为null,当参数3(values)为null,或values的尺寸为0时,API就会主动使用第二个参数的名称作为列名来拼接SQL语句;
参数3:要填添加的数据,添加记录需要使用到ContentValues,可以认为是hashmap:
ContentValues values = new ContentValues();
values.put("name",name);
values.put("age",age);

返回值:如果添加成功会返回一个Long类型的数值,如果添加失败会返回-1;

删:

int num = db.delete(
		"students",   //将要添加数据的数据表
		null,   //where条件,可包含“?”
		null    //String[]条件参数
	);


返回值:返回删除的数目,0代表没删除

改:

ContentValues values = new ContentValues();
values.put("age",18);
int num = db.update(
		"students",
		values,     //更新数据需要ContentValues,内部放的是update的set部分的字段和数据
		"id = ?",
		new String[]{"5"}
);



查:

Cursor cursor = db.query(
	"students", //  table
	new String[]{"id as _id","name"},   //column,如果该参数部位null,则必须要加上_id这个字段
	null,   //where
	null,   //数组中的元素,对应的是selection中对应的位置
	null,   //  group by
	null,   //  having
	null    //  order by
);
if(cursor!=null){
	//bianli cursor中的结果

	int count = cursor.getCount();//获取记录总数
	Log.d("MainActivity","count"+count);

	int columnCount = cursor.getColumnCount();//获取每行列的数量
	Log.d("MainActivity","columnCount"+columnCount);

	String[] columnNames = cursor.getColumnNames();//获取每列的列名
	Log.d("MainActivity","columnNames"+ Arrays.toString(columnNames));

	while(cursor.moveToNext()){  //使用while循环,每次移动一行,进行数据获取
		//进行一条记录的获取
		int index = cursor.getColumnIndex("name");
		if(index>-1){
			String string = cursor.getString(index);
			//Toast.makeText(this,string,Toast.LENGTH_SHORT).show();
		}
		index = cursor.getColumnIndex("_id");
		if(index>-1){
			int anInt = cursor.getInt(index);
			Toast.makeText(this,""+anInt,Toast.LENGTH_SHORT).show();
		}
	}
	query.close();
}
posted @ 2015-12-02 11:46  wmkill  阅读(149)  评论(0编辑  收藏  举报