使用SQLiteDatabase 对象查询数据表中的数据,需要用到SQL的SELECT语句。
SELECT语句的基本语法如下:
SELECT 字段名 FROM 数据表名称
“字段名”的部分可列出数据表中的一个或多个字段(以逗号分隔),或是用‘*’代表“所有字段“。
例如:
SELECT * FROM test //直接用 * 代表所有字段 SELECT name,phone,email FROM test
使用Cursor对象获取查询结果
要执行查询,需要用到SQLiteDatabase 对象的rawQuery()方法,第1个参数为SELECT语句,第2个参数设为null即可:
rawQuery("SELECT * FROM test",null); //返回test数据表的所有记录
rawQuery()方法返回的查询结果为Cursor类的对象。Cursor可称为”数据指针“,要读取查询结果中某一个记录,就必须将Cursor指标指到它,之后才能读取其内容。
moveToFirst() | 移到第一个记录 | moveToLast() | 移到最后一个记录 |
moveToNext() | 移到下一个记录 | moveToPrevious() | 移到前一个记录 |
Cursor cur = db.rawQuery("SELECT * FROM test");//执行查询 if(cur.moveToFirst()) //查询结果中有数据才继续 do{ //利用do/while循环逐个读取 … //读取指针所指的数据 }while(cur.moveToNext()); //若还有下一个记录,就继续do/while循环
public class MainActivity extends ActionBarActivity { static final String db_name = "testDB"; //数据库名称 static final String tb_name = "test"; // 数据表名称 SQLiteDatabase db; //数据库对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //打开或创建数据库 db = openOrCreateDatabase(db_name, Context.MODE_PRIVATE,null); String createTable = "CREATE TABLE IF NOT EXISTS " + tb_name + "(name VARCHAR(32)," + "phone VARCHAR(16)," + "email VARCHAR(64))"; db.execSQL(createTable); //创建数据表 Cursor c = db.rawQuery("SELECT * FROM "+tb_name,null);//查询tb_name数据表中的所有数据 if(c.getCount()==0){ //若无数据,则立即新增两项数据 addData("Flag Publishing Co.","6666666","service@flag.com.tw"); addData("PCDIY Magazine","7777777","service@flag.com.tw"); c=db.rawQuery("SELECT * FROM "+tb_name,null);//重新查询 } if (c.moveToFirst()) { //移到第1项数据(若有数据才继续) String str = "总共有 "+c.getCount()+"项数据\n"; str+="-------\n"; do { //逐项读出数据,并串接成信息字符串 str+="name:"+c.getString(0)+"\n"; str+="phone:"+c.getString(1)+"\n"; str+="email:"+c.getString(2)+"\n"; str+="------\n"; }while(c.moveToNext()); //有下一项就继续循环 TextView txv = (TextView) findViewById(R.id.txv); txv.setText(str); //显示信息字符串 } db.close(); //关闭数据库 } private void addData(String name,String phone,String email) { ContentValues cv = new ContentValues(3); //创建含3个数据项的对象 cv.put("name", name); cv.put("phone",phone); cv.put("email", email); db.insert(tb_name, null, cv); //将数据加到数据表 } }