SQLite

  SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用。

  sql语法就不介绍了,直接看在android中的使用

SQLiteOpenHelper——封装好的数据库操作辅助类,需重写

  重写方法

    onCreate:初始化数据库,创建表,添加初始数据

    onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等

  常用方法

    getReadableDatabase()    获取SQLiteDatabase对象,操作数据库

    getWritableDatabase()        获取SQLiteDatabase对象,操作数据库

    区别:在磁盘空间满或不可写时,1方法将获得只读的数据库对象,而2方法会报错,在正常情况下,获取到的都是可读写的数据库对象。

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { private static final String name="my";//数据库名
private static final int version=1;//版本号 //重写构造方法的时候选择参数少的一项
public DBHelper(Context context) {
//1:上下文 2:数据库名称 3:游标创建工厂 4:数据库版本 版本只能是整数 1 2 3..
super(context, name, null, version);
} //数据库的初始化 SQLiteDatabase数据库操作对象
//一般只在第一次运行和版本更新的时候调用
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库 主键默认自增
db.execSQL("create table student(" +
"_id integer not null primary key autoincrement," +
"name varchar(20)," +
"phone varchar(11)," +
"gender varchar(2))");
//添加一条测试数据
db.execSQL("insert into student values(null,?,?,?)"
,new Object[]{"小黑","12345678901","男"});
} /**
* 在版本升级的时候调用
* 修改version 为2 表示版本升级 就会调用这个方法
* @param db 数据库操作对象
* @param oldVersion 旧版本号
* @param newVersion 新版本号
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}

在android数据库的创建是需要创建对象才能创建的

在activity类中创建出一个数据库类对象

创建好数据对象就可以操作数据了 通过SQLiteDatabase获取   两种获取方法的区别上面已经提到过了

     //创建数据
DBHelper helper =new DBHelper(this);
//调用数据操作对象
SQLiteDatabase dbWrite=helper.getWritableDatabase();
SQLiteDatabase dbRead=helper.getReadableDatabase();

SQLiteDatabase给我们提供了很多操作数据的方法 

删除:(int) delete(String table,String whereClause,String[] whereArgs) 

   table: 表名

   whereClause:where条件  列名 占位符  id=?

   whereArgs:参数值数组

添加:(long) insert(String table,String nullColumnHack,ContentValues values)  

    nullColumnHack:为空列

    ContentValues values:通过键值对存储添加的数据  key为列 value为值

    insert方法 底层是通过拼接字符串的方式 如果ContentValues是空的 拼接成的sql语句无法执行会报错 所以给一个可以为空的列 当ContentValues为空时也可以执行 有兴趣的可以看一下源码

更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

    参数意思同上

查询:(Cursor) query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    返回值是一个游标   这个query参数较多 简单的查询就还是写一条sql语句简单点

      boolean distinct 去重复

      String table 表名

      String[] columns要查询的列

      String selection查询条件

      String[] selectionArgs查询参数值

      String groupBy分组

      String having分组条件

      String orderBy排序

      String limit分页查询限制

关闭数据库:(void) close()

执行一条sql语句:(void) execSQL(String sql) 增删改查

查询查询sql:(Cursor) rawQuery(String sql, String[] selectionArgs)

事务

        try {
db.beginTransaction();//开启事务
// db.update();
// db.insert();
db.setTransactionSuccessful(); //没有设置事物成功 finally就会回滚
} catch (Exception e) {
e.printStackTrace();
}finally {
db.endTransaction();
}

贴代码咯  执行sql语句 和封装好的方法

查询

   private void query() {
StringBuffer sb=new StringBuffer("select * from student where 1=1");
//参数集合
List<String> params=new ArrayList<>();
if(!TextUtils.isEmpty(id)){
sb.append(" and _id=?");
params.add(id);
}
if(!TextUtils.isEmpty(phone)){
sb.append(" and phone=?");
params.add(phone);
}
if(!TextUtils.isEmpty(name)){
sb.append(" and name=?");
params.add(name);
}
if(!TextUtils.isEmpty(gender)){
sb.append(" and gender=?");
params.add(gender);
}
SQLiteDatabase db=helper.getReadableDatabase();
String [] projection=new String [params.size()];
params.toArray(projection);
//返回值 游标
Cursor cursor=db.rawQuery(sb.toString(),projection);
    //判断游标是否为空,是否有一个值
while(cursor!=null&&cursor.moveToNext()){
// getColumnIndex获取列的下标 cursor.getXXXX()获取指定列的值
String name=cursor.getString(cursor.getColumnIndex("name"));
Integer id=cursor.getInt(cursor.getColumnIndex("_id"));
}
}

用不到的参数就让它为空吧   遍历数据就while循环就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查询并获得游标

更新

  private void update() {
StringBuffer sb=new StringBuffer("update student set ");
List params=new ArrayList();
if(!TextUtils.isEmpty(phone)){
sb.append("phone=?,");
params.add(phone);
}
if(!TextUtils.isEmpty(name)){
sb.append("name=?,");
params.add(name);
}
if(!TextUtils.isEmpty(gender)){
sb.append("gender=?,");
params.add(gender);
}
if (params.size()!=0){
//更新操作拼接字符串末尾有一个","需要去除
//删除最后一位的“,”
sb.setLength(sb.length()-1);
sb.append(" where 1=1");
//通过id指定 更新那行数据
if(!TextUtils.isEmpty(id)){
sb.append(" and _id=?");
params.add(id);
}else{
Toast.makeText(this,"请填写id",Toast.LENGTH_SHORT).show();
return;
}
SQLiteDatabase db=helper.getWritableDatabase();
Object [] o=new Object[params.size()];
params.toArray(o);//将数据存放到指定的数组中
db.execSQL(sb.toString(),o);
}
}
ContentValues cv = new ContentValues();//实例化ContentValues
cv.put("name","123");//添加要更改的字段及内容
String whereClause = "phone=?";//修改条件
String[] whereArgs = {"12312313213"};//修改条件的参数
db.update("student",cv,whereClause,whereArgs);//执行修改

删除

   private void delete() {
getAllText();
//拼接sql语句
StringBuffer sb=new StringBuffer("delete from student where 1=1");
//保存参数的list
List params=new ArrayList();
//判断条件 动态拼接
if(!TextUtils.isEmpty(id)){
sb.append(" and _id=?");
params.add(id);
}
if(!TextUtils.isEmpty(phone)){
sb.append(" and phone=?");
params.add(phone);
}
if(!TextUtils.isEmpty(name)){
sb.append(" and name=?");
params.add(name);
}
if(!TextUtils.isEmpty(gender)){
sb.append(" and gender=?");
params.add(gender);
}
SQLiteDatabase db=helper.getWritableDatabase();
if (params.size()!=0){
Object [] o=new Object[params.size()];
params.toArray(o);//将数据存放到指定的数组中
//执行删除
db.execSQL(sb.toString(),o);
}else{
db.execSQL(sb.toString());
}
Toast.makeText(this,"删除完成",Toast.LENGTH_SHORT).show();
}
String whereClause = "name=?";//删除的条件
String[] whereArgs = {"123"};//删除的条件参数
db.delete("student",whereClause,whereArgs);//执行删除

增加

  private void insert() {//保存数据到object数组
Object [] o=new Object[]{name,phone,gender};
//获取数据库操作对象
SQLiteDatabase db=helper.getWritableDatabase();
//sql:sql语句 bingArgs:参数数组
db.execSQL("insert into student values(null,?,?,?)",o);
//关闭连接
db.close();
Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();
}
ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据
cv.put("name","123");
db.insert("student",null,cv);//执行插入操作

android SQLite数据库总结的更多相关文章

  1. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  2. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  3. Android sqlite数据库存取图片信息

    Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...

  4. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  5. 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持

    IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...

  6. Android——SQLite/数据库 相关知识总结贴

    android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...

  7. Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

  8. Android SQLite数据库使用

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

  9. android: SQLite 数据库的最佳实践

    6.5.1    使用事务 前面我们已经知道,SQLite 数据库是支持事务的,事务的特性可以保证让某一系列的操 作要么全部完成,要么一个都不会完成.那么在什么情况下才需要使用事务呢?想象以下场 景, ...

  10. Android—SQLITE数据库的设计和升降级

    Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...

随机推荐

  1. 山寨Unity3D?搜狐畅游的免费开源游戏引擎Genesis-3D

    在CSDN上看到了<搜狐畅游发布3D游戏引擎Genesis-3D 基于MIT协议开源>(http://www.csdn.net/article/2013-11-21/2817585-cha ...

  2. AutoMapper(二)

    返回总目录 首先,先创建一个控制台项目,引用AutoMapper程序集,创建三个类User,UserDto,UserMappingProfile,下面的知识点的演示都以此项目为基础,代码分别如下: n ...

  3. Lesson 17 Always young

    Text My aunt Jennifer is an actress. She must be at least thirty-five years old. In spit of this, sh ...

  4. C#与C++的发展历程第四 - C#6的新时代

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  5. 最新Angular2案例rebirth开源

    在过去的几年时间里,Angular1.x显然是非常成功的.但由于最初的架构设计和Web标准的快速发展,逐渐的显现出它的滞后和不适应.这些问题包括性能瓶颈.滞后于极速发展的Web标准.移动化多平台应用, ...

  6. Go build constraints

    Go语言有一个不(奇)错(葩)的设计,就是build constraints(构建约束).可以在源码中通过注释的方式指定编译选项,比如只允许在linux下,或者在386的平台上编译啊之类的:还可以通过 ...

  7. JQuery插件定义

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...

  8. thinkphp - 复合查询(or、and 联合使用的方法)

    条件:查询今天内邮箱和QQ其中一项都不为空的有效数据的查询 释义:(or 条件)email  不为空 或者 qq_no 不为空    (and 条件) is_deleted 为0 并且 create_ ...

  9. iOS-证书

    1.iOS-证书相关 2.iOS-证书申请 3.iOS-APNS证书申请与使用 4.iOS-App发布证书的申请与使用

  10. ★Kali信息收集~4.DNS系列

    ★.1host:DNS信息 参数: 一般情况下,host查找的是A,AAAA,和MX的记录 案例: DNS服务器查询  host -t ns 域名 A记录和MX记录查询  host 域名(host - ...