android sqlite簡單的sql語句介紹


android sqlite的sql語句   不能刪除一個已經存在的字段,或者更改一個已經存在的字段的名稱、數據類型、限定符等等。
sqlite的數據類型:
1.NULL:空值。
2.INTEGER:帶符號的整型,具體取決有存入數字的範圍大小。
3.REAL:浮點數字,存儲爲8-byte IEEE浮點數。
4.TEXT:字符串文本。
5.BLOB:二進制對象


簡單的sql語句:
一、創建表

  1. String CREATE_NEWS = "create table weiboTb ("  
  2.             + "id integer primary key autoincrement, "  
  3.             + "title text, "  
  4.             + "content text, "  
  5.             + "publishdate integer,"  
  6.             + "commentcount integer)";
  7.  db.execSQL(CREATE_NEWS);

二、插入數據

    public long insert(String table, String nullColumnHack, ContentValues values)  
    可以看到,insert方法接收三個參數,第一個參數是表名,第二個參數通常都用不到,直接傳null,第三個參數則是一個封裝了待存儲數據的   
    ContentValues對象
        代碼:    
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. ContentValues values = new ContentValues();  
  3. values.put("title""這是一條微博的標題");  
  4. values.put("content""這是一條微博的內容");  
  5. values.put("publishdate", System.currentTimeMillis());  
  6. long id = db.insert("weiboTb"null, values);  


三、刪除數據
  [java] view plaincopy派生到我的代碼片
  1. public int delete(String table, String whereClause, String[] whereArgs)  
delete()方法接收三個參數,第一個參數同樣是表名,第二和第三個參數用於指定刪除哪些行,對應了SQL語句中的where部分。

    其作用相當於如下SQL語句:
        [sql] view plaincopy派生到我的代碼片
    1. delete from weiboTb where commentcount=0;  
    代碼:
    
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. db.delete("weiboTb""commentcount = ?"new String[] {"0"});  

四、修改數據
   [java] view plaincopy派生到我的代碼片
  1. public int update(String table, ContentValues values, String whereClause, String[] whereArgs)  

  2. 其作用相當於如下SQL語句:
    1. update weiboTb set title='heihiehiehieh' where id=2;  
    代碼: 
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. ContentValues values = new ContentValues();  
  3. values.put("title""xxxxxxx");  
  4. db.update("weiboTb", values, "id = ?"new String[] {"2"});  
    

五、查詢數據
    Android當中也提供了直接使用原生SQL語句來查詢數據庫表的方法,即SQLiteDatabase中的rawQuery()方法,方法定義如下:
  1. public Cursor rawQuery(String sql, String[] selectionArgs)  
    其中,rawQuery()方法接收兩個參數,第一個參數接收的就是一個SQL字符串,第二個參數是用於替換SQL語句中佔位符(?)的字符串數組。                      rawQuery()方法返回一個Cursor對象,所有查詢到的數據都是封閉在這個對象當中的,我們只要一一取出就可以了。
  
  Android專門提供了一種封裝好的API,使得我們不用編寫SQL語句也能查詢出數據,即SQLiteDatabase中的query()方法。query()提供了三個方法重          載,其中參數最少的一個也有七個參數,我們來看下方法定義:
  1. public Cursor query(String table, String[] columns, String selection,  
  2.             String[] selectionArgs, String groupBy, String having, String orderBy)   
    其中第一參數是表名,表示我們希望從哪張表中查詢數據。第二個參數用於指定去查詢哪幾列,如果不指定則默認查詢所有列。第三、第四個參數用於去約束查詢某一行或某幾行的數據,不指定則默認是查詢所有行的數據。第五個參數用於指定需要去group by的列,不指定則表示不對查詢結果進行group by操作。第六個參數用於對group by之後的數據進行進一步的過濾,不指定則表示不進行過濾。第七個參數用於指定查詢結果的排序方式,不指定則表示使用默認的排序方式。

代碼:
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. Cursor cursor = db.query("weiboTb"nullnullnullnullnullnull);  

可以看到,將第一個表名參數指定成news,然後後面的六個參數我們都用不到,就全部指定成null。

那如果是我們想查詢news表中所有評論數大於零的新聞該怎麼寫呢?代碼如下所示:

  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. Cursor cursor = db.query("weiboTb"null"commentcount>?"new String[]{"0"}, nullnullnull);  
由於第三和第四個參數是用於指定約束條件的,所以我們在第三個參數中指明瞭commentcount>?,然後在第四個參數中通過一個String數組來替換佔位符,這樣查到的結果就是news表中所有評論數大於零的新聞了。那麼其它的幾個參數呢?仍然用不到,所以還是隻能傳null。

通過查詢後,獲取到一個cursor,再從cursor中取出值

然後我們可以看到,query()方法的返回值是一個Cursor對象,所有查詢到的數據都是封裝在這個對象中的,所以我們還需要將數據逐一從Cursor對象中取出,然後設置到News實體類當中,如下所示:

  1. List<Weibo> WeiboList = new ArrayList<Weibo>();  
  2. if (cursor != null && cursor.moveToFirst()) {  
  3.     do {  
  4.         int id = cursor.getInt(cursor.getColumnIndex("id"));  
  5.         String title = cursor.getString(cursor.getColumnIndex("title"));  
  6.         String content = cursor.getString(cursor.getColumnIndex("content"));  
  7.         Date publishDate = new Date(cursor.getLong(cursor.getColumnIndex("publishdate")));  
  8.         int commentCount = cursor.getInt(cursor.getColumnIndex("commentcount"));  
  9.         Weibo weibo = new Weibo();  
  10.         weibo.setId(id);  
  11.         weibo.setTitle(title);  
  12.         weibo.setContent(content);  
  13.         weibo.setPublishDate(publishDate);  
  14.         weibo.setCommentCount(commentCount);  
  15.         weiboList.add(weibo);  
  16.     } while (cursor.moveToNext());  
  17. }  

    分頁查詢
  1. select title,content from users where commentcount > 0 order by publishdate desc limit 10 offset 10;  
  2. 其中limit表示本次查詢的數量   offset表示偏移量  表示從第幾條數據開始查詢

    聚合函數用法:
    1、查詢表中一共有多少行
        執行select語句使用的還是SQLiteDatabase中的rawQuery()方法。下面我們來嘗試一下,比如說想要統計weiboTb表中一共有多少行,就可以這樣寫:
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. Cursor c = db.rawQuery("select count(1) from weiboTb"null);  
  3. if (c != null && c.moveToFirst()) {  
  4.     int count = c.getInt(0);   
  5. }  
  6. c.close();  
   可以看到,在rawQuery()方法中我們指定了一個聚合查詢語句,其中count(1)就是用於去統計一共有多少行的。當然這裏並不一定要用count(1),使用     
    count(*)或者count(主鍵)都可以。然後rawQuery()方法返回的是一個Cursor對象,我們從這個Cursor當中取出第一行第一列的數據,這也就是統計出的
    結果了。


    2、那如果我們想要統計出weiboTb表中評論的總數量該怎麼寫呢?代碼如下所示:
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. Cursor c = db.rawQuery("select sum(commentcount) from weiboTb"null);  
  3. if (c != null && c.moveToFirst()) {  
  4.     int count = c.getInt(0);  
  5. }  
  6. c.close();  
      我們發現,代碼基本是非常相似的,只不過查詢語句當中count()函數替換成了sum()函數。當然了,sum()函數要求傳入一個指定的列名,表示我們要     
       彙總這一列的總合,因此這裏我們傳入了commentcount這一列。
可以總結出一些結論,聚合函數都是要使用rawQuery()方法進行SQL查詢


六、修改表的操作
 
  添加字段
    增加一列 - ALTER TABLE 表名 ADD COLUMN 列名 數據類型 限定符
  1.  db.execSQL("alter table comment add column publishdate integer");  
   
   改變表名
      改變表名 - ALTER TABLE 舊錶名 RENAME TO 新表名
         db.execSQL("alter table students rename to teachers");


七、刪除表
        刪除表 - DROP TABLE 表名
        DROP TABLE Teachers;
        或者DROP TABLE IF EXISTS  Teachers;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章