Android开发之数据存储与访问(4)-SQLite数据库
来源:互联网 发布:java asm demo 编辑:程序博客网 时间:2024/04/27 20:09
除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。这些方法实际上是给那些不太了解SQL语法的菜鸟使用的,对于熟悉SQL语法的程序员而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。
Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关
不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。Insert()方法内部实际上通过构造insert SQL语句完成数据的添加,Insert()方法的第二个参数用于指定空值字段的名称,相信大家对该参数会感到疑惑,该参数的作用是什么?是这样的:如果第三个参数values 为Null或者元素个数为0, 由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要, insert语句必须给定一个字段名,如:insert into person(name) values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person() values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。
使用事务操作SQLite数据库
//使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,
//如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,
//如果没有调用setTransactionSuccessful() 方法则回滚事务。使用例子如下:
SQLiteDatabase db = ....;
db.beginTransaction();//开始事务
try {
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"刘德华", 34});
db.execSQL("update person set name=? where personid=?", new Object[]{"张学友", 1});
db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
} finally {
db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
}
db.close();
//上面两条SQL语句在同一个事务中执行
//如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,
//如果没有调用setTransactionSuccessful() 方法则回滚事务。使用例子如下:
SQLiteDatabase db = ....;
db.beginTransaction();//开始事务
try {
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"刘德华", 34});
db.execSQL("update person set name=? where personid=?", new Object[]{"张学友", 1});
db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
} finally {
db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
}
db.close();
//上面两条SQL语句在同一个事务中执行
0 0
- Android开发之数据存储与访问(4)-SQLite数据库
- Android开发之数据存储与访问(3)-SQLite数据库
- 数据存储与访问之——初见SQLite数据库
- 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
- 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- 【Android 开发】:数据存储之 SQLite 数据库操作(二)
- 【Android 开发】:数据存储之 SQLite 数据库操作(三)
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之:SQLite数据库存储
- Android 数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- [Android SQLite]数据存储与访问 - SharedPreferences
- Android数据存储与IO之二 SQLite数据库
- Android基础入门教程——6.3.1 数据存储与访问之——初见SQLite数据库
- 异步加载JS
- C# Datagridview完整攻略
- JAVA环境变量
- assert用法总结
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- Android开发之数据存储与访问(4)-SQLite数据库
- JAVA项目工程导入.jar包
- devexpress gridView获取当前单元格在屏幕上的位置
- parcelable
- ORA-03113: end-of-file on communication channel
- OK6410开发板使用交换机搭建NFS
- 2.C语言-----内存与指针(1)
- 数据库-设计-数据库表字段类型设计标准
- Cracking The Coding Interview5.3 暂存