根据上一篇文章,要注意一个操作,就是查询当然直接返回游标Cursor也行,但是如果我一定要返回一条数据,而不是Cursor,如果返回一条数据,我在应用层就可以直接使用数据了,而不需要再去while查找出一条适合的数据条目,那么就可以这样:
步骤如下:在上一篇的基础上:
<1> : 首先新建一个对象类:
public class DataUser { int id; String user; String nickname; String password; }
<2> : 更新上篇中的类SQLHelper,添加查询方法:
public DataUser querys(/*query condition, eg : id*/int id){ SQLiteDatabase sqldb=this.getReadableDatabase(); DataUser usr=new DataUser(); String columns[]={SQLManager.TABLE_USER_FIELD,SQLManager.TABLE_PASSWORD_FIELD,SQLManager.TABLE_NICKNAME_FIELD}; String orderby=SQLManager.TABLE_ID_FIELD; String selections="id=?"; String conditions[]=new String[]{""+id}; Cursor cr = sqldb.query(SQLManager.SQ_LITE_DATABASE_TABLE, columns, selections, conditions, null, null, null); cr.moveToFirst(); //only a data list return usr.id=id; usr.user=cr.getString(1); usr.nickname=cr.getString(2); usr.password=cr.getString(3); return usr; }
<3> : 如果有很多条记录需要返回,可以这样改:比如返回密码相同的所有数据条目:
public Listquerys(/* query condition, eg : pwd */String password) { SQLiteDatabase sqldb = this.getReadableDatabase(); List usrl = new ArrayList (); DataUser usr=new DataUser(); String columns[] = { SQLManager.TABLE_USER_FIELD, SQLManager.TABLE_PASSWORD_FIELD, SQLManager.TABLE_NICKNAME_FIELD }; String orderby = SQLManager.TABLE_ID_FIELD; String selections = "u_pwd=?"; String conditions[] = new String[] { "" + password }; Cursor cr = sqldb.query(SQLManager.SQ_LITE_DATABASE_TABLE, columns, selections, conditions, null, null, null); cr.moveToFirst(); // only a data list return while (!cr.isAfterLast()) { usr.id = cr.getInt(0); usr.user = cr.getString(1); usr.nickname = cr.getString(2); usr.password = cr.getString(3); usrl.add(usr); cr.moveToNext(); } return usrl; }
OK,其他的一次类推即可以了