sqlite

支持数据类型:

  • NULL,INTEGER,REAL,TEXT,BLOB
  • 空值,整形值,浮点值,字符串,二进制对象。
动态数据类型(弱引用):
  • 当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite会尝试将该值转化成该列的类型,如果不能转换,则该值将作为本身的类型。主键是integer时不能转。
sqlite_第1张图片
Paste_Image.png

sql语句:

  • 查询语句: select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句
  • 如: select * from person
    select * from person order by id desc
    select name from person group by name having count(*)>1
    分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
    select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
  • 插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智’,3)
  • 更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
  • 删除语句:delete from 表名 where 条件子句。如:delete from person where id=10

占位?

sql中使用的单引号,如下:
db.execSQL("insert into person(name, age) values('林计钦', 24)");
为了解决转意的麻烦,推荐使用?占位
SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)如:
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"张三", 4});
execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。

  • 完整实例:
    SQLiteDatabase db = ....;
    db.beginTransaction();//开始事务
    try {
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"李四", 20});
    db.execSQL("update person set name=? where personid=?", new Object[]{"asd", 1});
    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,
    如果不调用此方法会回滚事务
    } finally {
    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
    }
    db.close();

  • 默认的一条sql语句就是一个事物,但是不如一次插入20条数据,用上面的这种方式就会提高性能。

  • GreenDao 升级
    http://blog.csdn.net/growth58/article/details/50453038

你可能感兴趣的:(sqlite)