一、SQLite简介 

Google为Andriod的较大的数据处理提供了SQLite,
他在数据存储、管理、维护等各方面都相当出色,
功能也非常的强大。

二、SQLite的特点

1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,
而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)
都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统
也是能够运行,比如:Android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。
这意味着多个进程可以在同一时间从同一数据库读取数据,
但只能有一个可以写入数据。

三、SQLite的数据类型

·关于SQLite的数据类型:

  -SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型

  -依次代表:空值、整型值、浮点值、字符串值、二进制对象

·动态数据类型(弱引用)

  -当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,

  SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储

四、SQLiteDatabase类

·SQLiteDatabase类

  -提供创建、删除、执行的SQL命令,并执行其他常见的数据库管理任务的方法

  -每个程序的数据库名字是唯一的

·SQLiteDatabase类为我们提供了很多种方法,而较常用的方法如下

  (int) delete(String table,String whereClause,String[] whereArgs)
  删除数据行的便捷方法

  (long) insert(String table,String nullColumnHack,ContentValues values)
  添加数据行的便捷方法

  (int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
  更新数据行的便捷方法

  (void) execSQL(String sql)
  执行一个SQL语句,可以是一个select或其他的sql语句

  (void) close()
  关闭数据库

  (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
  查询指定的数据表返回一个带游标的数据集

  (Cursor) rawQuery(String sql, String[] selectionArgs)
  运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)

·数据的添加

//使用insert方法
ContentValues cv = new ContentValues();
//实例化一个ContentValues用来装载待插入的数据
cv.put("username","Jack Johnson");//添加用户名
cv.put("password","iLovePopMusic"); //添加密码
db.insert("user",null,cv);//执行插入操作 使用execSQL方式来实现
String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句
db.execSQL(sql);//执行SQL语句

·数据的删除

//使用delete方法
String whereClause = "username=?";//删除的条件
String[] whereArgs = {"Jack Johnson"};//删除的条件参数
db.delete("user",whereClause,whereArgs);//执行删除 String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句
db.execSQL(sql);//执行删除操作

·数据的修改

//使用update方法
ContentValues cv = new ContentValues();//实例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的字段及内容
String whereClause = "username=?";//修改条件
String[] whereArgs = {"Jack Johnson"};//修改条件的参数
db.update("user",cv,whereClause,whereArgs);//执行修改 String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL语句
db.execSQL(sql);//执行修改

·数据的查询

通过query实现查询的
  public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

  table:表名称
  colums:列名称数组
  selection:条件子句,相当于where
  selectionArgs:条件语句的参数数组
  groupBy:分组
  having:分组条件
  orderBy:排序类
  limit:分页查询的限制
  Cursor:返回值,相当于结果集ResultSet

游标(Cursor)
  getCount()总记录条数
  isFirst()判断是否第一条记录
  isLast()判断是否最后一条记录
  moveToFirst()移动到第一条记录
  moveToLast()移动到最后一条记录
  move(int offset)移动[是指偏移量而不是指移到指定位置]
  moveToNext()移动到吓一条记录
  moveToPrevious()移动到上一条记录
  getColumnIndex(String columnName)获得指定列索引的int类型值

//游标(Cursor)
Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标
if(c.moveToFirst()){//判断游标是否为空
    for(int i=0;i<c.getCount();i++){
        c.moveToNext();
        String username = c.getString(c.getColumnIndex("username");
        String password = c.getString(c.getColumnIndex("password"));
    }
//rawQuery实现的带参数查询

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
    String password = c.getString(c.getColumnIndex("password"));
}

四、SQLiteOpenHelper

·SQLiteOpenHelper

  -SQLiteOpenHelper是SQLiteDatabase的一个帮助类,
  用来管理数据库的创建和版本的更新。
  一般是建立一个类继承它,
  并实现它的onCreate和onUpgrade方法。

  -onCreate(SQLiteDatabase db)
  创建数据库时调用

  -onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
  版本更新时调用

  -getReadableDatabase()
  创建或打开一个只读数据库

  -getWritableDatabase()
  创建或打开一个读写数据库

·创建SQLiteOpenHelper类

public class MyDatabaseOpenHelper extends SQLiteOpenHelper {

    private static final String db_name = "mydata.db"; // 数据库名称
private static final int version = 1; // 数据库版本
  
public MyDatabaseOpenHelper(Context context) {
super(context, db_name, null, version);
} //该方法没有数据库存在才会执行
public void onCreate(SQLiteDatabase db) {
     //没有数据库打印日记
Log.i("Log","没有数据库,创建数据库");
     //建表语句
String sql_message="create table t_message (id int primary key,userName varchar(50),lastMessage varchar(50),datetime varchar(50))";
//执行建表语句
db.execSQL(sql_message);
} //数据库存更新才会执行
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      Log.i("updateLog","数据库更新了!");
  }
}

·调用了SQLiteOpenHelper类的getWritableDatabase()方法来获取一个数据库

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     DatabaseOpenHelper helper = new DatabaseOpenHelper(MainActivity.this);
    //获取一个可写的数据库
    SQLiteDatabase db = helper.getWritableDatabase();   } }

Android之SQLite数据库篇的更多相关文章

  1. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)

    android 一个SQLite数据库多个数据表(带demo) 前言        demo演示        一.搭建        二.建立实体类        三.建立数据库操作类        ...

  2. Qt for Android 打包 SQLite 数据库

    Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...

  3. Android实现SQLite数据库联系人列表

    Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...

  4. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

  5. android中sqlite数据库的基本使用和添加多张表

    看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...

  6. Android之SQLite数据库使用

    转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...

  7. 我的Android六章:Android中SQLite数据库操作

    今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...

  8. android操作sqlite数据库及心得

    写这篇文章主要是网上的对sqlite的操作太多且太杂,非常多时候都不能非常好的运用到自己的项目中,结构不清晰,我自己写了一篇适合刚刚接触的人看的操作方法. 近来用android时要将一些数据保存起来, ...

  9. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

随机推荐

  1. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  2. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  3. Web大前端时代之:HTML5+CSS3入门系列

    准备来一波新技术,待续.... Old: 联系源码:https://github.com/dunitian/LoTHTML5 文档下载:https://github.com/dunitian/LoTD ...

  4. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  5. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  6. 玩转spring boot——开篇

    很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...

  7. 一个诡异的COOKIE问题

    今天下午,发现本地的测试环境突然跑不动了,thinkphp直接跑到异常页面,按照正常的排错思路,直接看thinkphp的log 有一条 [ error ] [2]setcookie() expects ...

  8. 大数据之Yarn——Capacity调度器概念以及配置

    试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...

  9. Linux基础介绍【第八篇】

    Linux网络基础 网线 568A 568B 线序:橙白橙 绿白蓝 蓝白绿 棕白棕 交换机.路由器 交换机:DLINK.H3C.CISCO 交换机(Switch)是一种用于电信号转发的网络设备.它可以 ...

  10. 关于《Linux.NET学习手记(8)》的补充说明

    早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...