使用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); //將數據加到數據表 } }