1、首先对sqlite介绍
sqlite是一个轻量级数据库,符合ACID的特点
注:Atomicity原子性 一个原子性任务是一个独立的单元
Consistency一致性 不管是几个线程共同完成要保持结果的一致性
Isolation隔离性 隔离性是隐藏外部未提交的状态,通过悲观锁和乐观锁解决
Durability耐久性 就是说一个状态提交之前所有的状态变化都能被记录,突然断电也能有保存上个状态
在windows的迅雷qq数据缓存和android的数据存储方面都有应用
2、sqlite的特点
(1)单一文件
(2)轻型
(3)无需安装
(4)嵌入式
(5)跨平台,开源
(6)弱字段类型
支持NULL: 这个值为空值
VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。
CHAR(n):长度固定为n的字串,n不能超过 254。
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。
DATA :包含了 年份、月份、日期。TIME: 包含了 小时、分钟、秒。
3、sqlite的数据使用
首先在windows里的sqlite.dll文件
迅雷qq数据缓存和android的数据存储方面都有应用
在android里、
(1)app运行数据的保存.参数。属性等
(2)离线功能 下载地图离线包在没有网的时候也能看
(3)数据处理 对于一些数据的处理可以写函数进行处理也可以在数据库中进行存储
数据库的增删改查常用的操作语句,sqlitedatabase数据库的使用
1、创建数据库
openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)
实例:db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/databases/stu.db",null);
2、创建表
编写创建表的SQL语句
调用SQLiteDatabase的execSQL()方法来执行SQL语句
private void createTable(SQLiteDatabase db){
//创建表SQL语句
String person =create table usertable(_id integer primary key autoincrement,sname text,snumber text)";
//执行SQL语句
db.execSQL(person);
}
3、增加字段
(1)SQlitedatabase的insert函数
insert (String table ,String nullColumnHack,ContentValues values))
参数1 表名称,
参数2 空列的默认值
参数3 ContentValues类型的一个封装了列名称和列值的Map;
(2)编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行
第一种方法的代码:
(1)方法的实现
private void insertTable(SQLiteDatabase db){
db.insert("stu_table",null,cValue);
ContentValues cvalue = new ContentValues();
//增加用户名
cvalue.put("name","zhang yanyan");
//增加密码
cvalue.put("passWord","12345");
//调用insert方法
db.insert("person",null,cvalue);
(2) execSQL方法的实现
private void insertTable(SQLiteDatabase db){
//需要插入的sql语句
String sql = "insert into person (name,password) values ('zhansan','123')"
//sql语句的执行
db.execSQL(sql);
(3) 删除数据
删除数据也有两种方法:
①调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法
参数1 表名称
参数2 删除条件
参数3 删除条件值数组
②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。
第一种方法的代码:
private void delete(SQLiteDatabase db) {
//删除条件
String whereClause = "id=?";
//删除条件参数
String[] whereArgs = {String.valueOf(1)};
//执行删除
db.delete("person",whereClause,whereArgs);
}
第二种方法的代码:
private void delete(SQLiteDatabase db) {
//删除SQL语句
String sql = "delete from stu_table where _id = 6";
//执行SQL语句
db.execSQL(sql);
}
(4)修改数据
修改数据有两种方法:
①调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法
参数1 表名称
参数2 跟行列ContentValues类型的键值对Key-Value
参数3 更新条件(where字句)
参数4 更新条件数组
②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。
第一种方法的代码:
private void update(SQLiteDatabase db) {
//实例化内容值
ContentValues values = new ContentValues();
//在values中添加内容
values.put("snumber","101003");
//修改条件
String whereClause = "id=?";
//修改添加参数
String[] whereArgs={String.valuesOf(1)};
//修改
db.update("usertable",values,whereClause,whereArgs);
}
第二种方法的代码:
private void update(SQLiteDatabase db){
//修改SQL语句
String sql = "update stu_table set snumber = 654321 where id = 1";
//执行SQL
db.execSQL(sql);
}
(5)数据的查询
android数据的查询通过游标cursor获得
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
@param table:表名称
@param columns:列名称数组
@param selection:条件字句,相当于where
@param selectionArgs:条件字句,参数数组
@param groupBy:分组列
@param having:分组条件
@param orderBy:排序列
@param limit:分页查询限制
@param Cursor:返回值,相当于结果集ResultSet
cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针 move(),获得列值方法getString()
例如:
private void query(SQLiteDatabase db) {
//查询获得游标
Cursor cursor = db.query ("usertable",null,null,null,null,null,null);
//判断游标是否为空
if(cursor.moveToFirst() {
//遍历游标
for(int i=0;i<cursor.getCount();i++){
cursor.move(i);
//获得ID
int id = cursor.getInt(0);
//获得用户名
String username=cursor.getString(1);
//获得密码
String password=cursor.getString(2);
//输出用户信息 System.out.println(id+":"+sname+":"+snumber);
}
}
}
(6)删除
直接调用SQLiteDatabase的execSQL()方法来执行
Java
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
private void drop(SQLiteDatabase db){
//删除表的SQL语句
String sql ="DROP TABLE stu_table";
//执行SQL
db.execSQL(sql);