查询数据及使用Cursor对象

使用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()+"项数据
";
            str+="-------
";

            do {              //逐项读出数据,并串接成信息字符串
                str+="name:"+c.getString(0)+"
";
                str+="phone:"+c.getString(1)+"
";
                str+="email:"+c.getString(2)+"
";
                str+="------
";
            }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);    //将数据加到数据表
    }

}
原文地址:https://www.cnblogs.com/lan-xin/p/8472747.html