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;

展开阅读全文

没有更多推荐了,返回首页