Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储。然而SQLite作为一个轻型的关系型数据库,基于其轻量、跨平台、多语言接口及安全性等诸多因数考虑,因而Android较大的数据存储采用了SQLite。SQLite与大多数关系型数据库一样都遵循ACID,语法也非常相似。只要您懂得mysql、sqlserver等关系型数据库的操作,只要查看下SQLite的官方文档便可快速上手。SQLite语法您可通过http://sqlite.org/lang.html进行查看。

  接下来看看Android是怎样操作SQLite的吧。Android下只要扩展SQLiteOpenHelper接口,并实现其Create和update方法便可以便捷地对SQLite进行管理。下面看下数据库管理类。

package com.example.ibm.myappsqllite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* Created by ibm on 2015/9/11.
*/
public class Db extends SQLiteOpenHelper {
public Db(Context context, int version) {
super(context, "db", null, version);//可以根据最后一个参数的version来完成表的自动创建和升级
} @Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE user(" +
"id integer primary key autoincrement, " +
"name TEXT DEFAULT \"\"," + "sex TEXT DEFAULT \"\")";
System.out.println("创建数据库:" + sql);
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//更新数据库
String sql = "ALTER TABLE user ADD COLUMN mark TEXT DEFAULT \"\"";
System.out.println("更新数据库:" + sql);
db.execSQL(sql);
}
}

  在MainActivity.java中的onCreate方法添加如下代码。

Db db = new Db(this, 1);

        //清空数据
SQLiteDatabase sqLiteDb = db.getWritableDatabase();
System.out.println("------------清空表数据------------");
sqLiteDb.delete("user", null, null);
System.out.println("------------充值表自增ID------------");
sqLiteDb.execSQL("update sqlite_sequence SET seq = 0 where name ='user';");//重置id
sqLiteDb.close(); // 写入数据
System.out.println("------------写入数据------------");
sqLiteDb = db.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", "王五");
cv.put("sex", "男");
sqLiteDb.insert("user", null, cv); cv = new ContentValues();
cv.put("name", "李利");
cv.put("sex", "女");
sqLiteDb.insert("user", null, cv);
sqLiteDb.close(); // 查询数据
db = new Db(this, 2);
System.out.println("------------查询数据1------------");
SQLiteDatabase sqLiteDbup = db.getReadableDatabase();
Cursor c = sqLiteDbup.query("user", new String[]{"id", "name", "sex"}, null, null, null, null, null); while (c.moveToNext()) {
Integer id = c.getInt(c.getColumnIndex("id"));
String name = c.getString(c.getColumnIndex("name"));
String sex = c.getString(c.getColumnIndex("sex"));
System.out.println(String.format("id: %d, name: %s, sex: %s", id, name, sex));
}
sqLiteDbup.close(); //更新数据
System.out.println("------------更新数据------------");
SQLiteDatabase sqldb = db.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("sex", "gay");
contentValues.put("mark", "wang wu is gay");
String[] whereValues = {"王五"};
sqldb.update("user", contentValues, "name = ?", whereValues);
sqldb.close(); // 查询数据
System.out.println("------------查询数据2------------");
sqLiteDbup = db.getReadableDatabase();
c = sqLiteDbup.query("user", new String[]{"id", "name", "sex", "mark"}, null, null, null, null, null); while (c.moveToNext()) {
Integer id = c.getInt(c.getColumnIndex("id"));
String name = c.getString(c.getColumnIndex("name"));
String sex = c.getString(c.getColumnIndex("sex"));
String mark = c.getString(c.getColumnIndex("mark"));
System.out.println(String.format("id: %d, name: %s, sex: %s, mark: %s", id, name, sex, mark));
}
sqLiteDbup.close(); //删除数据
System.out.println("------------删除数据------------");
sqldb = db.getWritableDatabase();
String[] delWhere = {"李利"};
sqldb.delete("user", "name = ?", delWhere);
sqldb.close(); // 查询数据
System.out.println("------------查询数据3------------");
sqLiteDbup = db.getReadableDatabase();
c = sqLiteDbup.query("user", new String[]{"id", "name", "sex", "mark"}, null, null, null, null, null); while (c.moveToNext()) {
Integer id = c.getInt(c.getColumnIndex("id"));
String name = c.getString(c.getColumnIndex("name"));
String sex = c.getString(c.getColumnIndex("sex"));
String mark = c.getString(c.getColumnIndex("mark"));
System.out.println(String.format("id: %d, name: %s, sex: %s, mark: %s", id, name, sex, mark));
}
sqLiteDbup.close(); db.close();

  将应用运行到虚拟机后,你可以看到如下结果

09-11 18:58:29.460    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 创建数据库:CREATE TABLE user(id integer primary key autoincrement, name TEXT DEFAULT "",sex TEXT DEFAULT "")
09-11 18:58:29.500 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------清空表数据------------
09-11 18:58:29.532 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------充值表自增ID------------
09-11 18:58:29.532 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------写入数据------------
09-11 18:58:29.616 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查询数据1------------
09-11 18:58:29.628 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 更新数据库:ALTER TABLE user ADD COLUMN mark TEXT DEFAULT ""
09-11 18:58:29.640 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: 男
09-11 18:58:29.644 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 2, name: 李利, sex: 女
09-11 18:58:29.644 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------更新数据------------
09-11 18:58:29.668 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查询数据2------------
09-11 18:58:29.684 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: gay, mark: wang wu is gay
09-11 18:58:29.684 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 2, name: 李利, sex: 女, mark:
09-11 18:58:29.688 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------删除数据------------
09-11 18:58:29.708 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查询数据3------------
09-11 18:58:29.716 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: gay, mark: wang wu is gay

  此时可以查看下模拟器中的/data/data/项目包/databases/目录下,已经存在了一个db数据库(名字为前面定义的数据库名)。

Android数据存储之SQLite的操作的更多相关文章

  1. Android数据存储:SQLite

    Android数据存储之SQLite SQLite:Android提供的一个标准的数据库,支持SQL语句.用来处理数据量较大的数据.△ SQLite特征:1.轻量性2.独立性3.隔离性4.跨平台性5. ...

  2. Android数据存储之SQLite数据库

    Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...

  3. 【转载】Android数据存储之SQLite

    SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行. 在Android中创建的SQLite数据库存储在:/d ...

  4. android数据存储之Sqlite(一)

    SQLite学习笔记 1. Sqlite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低 ...

  5. Android数据存储之SQLite使用

    SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行. 在Android中创建的SQLite数据库存储在:/d ...

  6. android数据存储之Sqlite(二)

    SQLite学习笔记 前言:上一章我们介绍了sqlite的一些基本知识以及在dos命令下对sqlite进行的增删改查的操作,这一章我们将在android项目中实际来操作sqlite. 1. SQLit ...

  7. Android数据读取之Sqlite数据库操作

    咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...

  8. Android数据存储之Sqlite的介绍及使用

    前言: 本来没有打算整理有关Sqlite数据库文章的,最近一直在研究ContentProvider的使用,所有觉得还是先对Sqlite进行一个简单的回顾,也方便研究学习ContentProvider. ...

  9. Android 数据存储之 SQLite数据库存储

    ----------------------------------------SQLite数据库---------------------------------------------- SQLi ...

随机推荐

  1. 【 Jquery插件】引导用户如何操作网站功能的向导

    Joyride是一个jQuery插件,可以利用它来创建一个引导用户如何操作网站功能的向导.通过定义一个操作步骤顺序,这个插件会在需要操作的HTML元素旁边显示一个帮助说明的Tooltips. http ...

  2. Java基础-四要素之一《多态》

    什么是多态 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的 ...

  3. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析

    上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 ...

  4. 40.Android之新手指引界面学习

    我们经常可以看到打开新App会有新手指引界面,类似蒙板效果今天来学习.原理其实很简单,设置一个透明Activity或者Dialog,然后修改其属性即可.由于实现比较简单,就贴一部分代码. 1.在And ...

  5. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

  6. Longest Common Subsequence (LCS)

    最长公共子序列(LCS)是经典的DP问题,求序列a[1...n], b[1..m]的LCS. 状态是DP[i][j],表示a[1..i],b[1..j]的LCS. DP转移方程是 DP[i][j]= ...

  7. FluentData,它是一个轻量级框架,关注性能和易用性。

    http://www.cnblogs.com/zengxiangzhan/p/3250105.html FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.M ...

  8. C++_Eigen函数库用法笔记——Block Operations

    Using block operations rvalue, i.e. it was only read from lvalues, i.e. you can assign to a block Co ...

  9. Visual Studio Online Integrations-Build and release

                                      原文:http://www.visualstudio.com/zh-cn/explore/vso-integrations-dire ...

  10. iOS-Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its super

    今天在XCode6.3上面重写TabBar的时候,自定义tabBar的代理遇到的一个问题 在重写tabBar的代理的时候遇到了一个警告. 解决方法: 在.m文件中 警告消失.