删除和修改的方法与(上)提到的增长的方法类似,均可以执行sql语句或者直接用ContentValue java
查询操做 sql
/** * * 查询:查询与其余不一样的是: * 1,查询只要获取可读的数据库就能够了 * 2,增删改执行sql语句后都没有返回值,而查询须要有返回值Cursor * @return */ public User find(int id){ SQLiteDatabase db = myhelper.getReadableDatabase(); // 获取可读的数据库,先尝试获取可写的,异常再获取可读的 Cursor c = db.rawQuery("SELECT name, password FROM user WHERE id=?", new String[]{id+""}); /*第二种查询操做 /** * 最后三个参数:groupBy分组, having分组条件, orderBy排序 * user表,查询name和password两列, 查询条件是id */ Cursor c = db.query("user", new String[]{"name","password"}, "id=?", new String[]{id +""}, null, null, null); */ User user = null; if(c.moveToNext()){ //将游标向后移动,返回移动是否成功,判断是否包含下一条记录 String name = c.getString(c.getColumnIndexOrThrow("name"));
//先查到name的索引,在经过索引拿到内容,效率没下面的高 //String name = c.getString(0); int password = c.getInt(1); user = new User(id, name, password); } return user; }
在测试类中:(建立类继承AndroidTestCase,清单文件中配置test节点,方法名以test开头) 数据库
public void testCreateDB(){ /** * 第一次执行,指定环境下没有数据库文件:建立数据库,执行oncreate方法 * 之后再执行,数据库存在,版本号没变:只打开数据库 * 数据库存在,版本号改变:打开数据库,执行onUpgrade()方法 */ MyHelper myhelper = new MyHelper(getContext()); //activity中以getApplicationContext()获取当前程序环境,测试类中以getContext()获取环境 myhelper.getWriteableDatabase(); //获取可写的数据库 } 在这里执行代码 public void testInsert(){ UserDao dao = new UserDao(getContext()); //不能定义成全局变量 dao.insert(new User("xxx",123456)); }
其他的方法与上面的类似,都是经过dao对象来调用方法。 测试