Android 数据存储之SQLite
来源:互联网 发布:java ee的jdk 编辑:程序博客网 时间:2024/05/16 17:59
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主流的操作系统运行。支持高达2TB大小的数据库,以单个文件的形式存在,以B-Tree的数据结构形式存储在磁盘上。
特点主要包括:
1、轻量级 一个动态库 单文件。
2、独立性 没有依赖 无需安装。
3、隔离性 全部在一个文件夹中。
4、跨平台 支持众多主流操作系统。
5、多语言接口 支持众多编程语言。
6、安全性,事务。
7、无帐号管理,无网络支持。
关于事务处理的安全性问题:
1、通过数据库上的独占性和共享锁来实现独立事务处理。
2、多个进程可以在同一时间从同一数据库访问数据,但在同一时刻只能有一个写入数据。
关于SQLite的数据类型:
SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型。依次代表:空值,整型值,浮点型,字符型,二进制对象。
布尔数据类型:
SQLite并没有提供专门的布尔存储类型,取而代之的是存储整型1表示true,0表示false。
日期和时间数据类型:
和布尔类型一样,SQLite也同样没有提供专门的日期时间存储类型,而是以TEXT、REAL和INTEGER类型分别不同的格式表示该类型,如:
TEXT: "YYYY-MM-DD HH:MM:SS.SSS"
INTEGER: 以Unix时间形式保存数据值,即从1970-01-01 00:00:00到当前时间所流经的秒数。
动态数据类型(弱引用):
当某个值插入到数据库时,SQLite将会检查它的数据类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列对应的数据类型,如果不能转换,则该值将作为本身的类型存储。
进入主题:
如何通过Android API 操作SQLite数据库:
1、创建或打开数据库
//如果数据库存在,就打开,否则创建context.openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory)
参数:
name 数据库名称
mode:
MODE_PRIVATE 默认模式,值为0,文件只可以被调用该方法的应用程序访问
MODE_WORLD_READABLE 所有的应用程序都具有对该文件读的权限。
MODE_WORLD_WRITEABLE 所有的应用程序都具有对该文件写的权限。
factory: 当query方法被调用时,用来实例化cursor,通常为null。
创建成功后会返回一个SQLiteDatabase对象,通过SQLiteDatabase对象完成数据库的表创建,增,删,改,查操作。
2、关闭数据库
对数据库操作完毕之后,就要关闭数据库,否则会抛出SQLiteException异常。关闭数据库只需调用成SQLiteDatabase对象的.close()方法即可。
3、删除数据库
直接调用context.deleteDatebase()方法即可
1、数据库操作示例1(直接发送SQL语句):
//每个程序都有自己的数据库 默认情况下是各自互相不干扰//创建一个数据库,如果没有就创建,否则打开SQLiteDatabase db = context.openOrCreateDatabase("user.db", MODE_PRIVATE, null);//创建表db.execSQL("create table if not exists user (_id integer primary key autoincrement, name text not null , age integer not null , sex text not null )");db.execSQL("insert into usertb(name,sex,age) values('张三','女',18)");//使用事务db.beginTransaction();//开始事务try {db.execSQL("insert into usertb(name,sex,age) values('李四','女',19)");db.execSQL("insert into usertb(name,sex,age) values('王五','男',20)"); db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务} finally { db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务} //查询Cursor c = db.rawQuery("select * from user", null);if (c!=null) {while (c.moveToNext()) {Log.i("info", "_id:"+c.getInt(c.getColumnIndex("_id")));Log.i("info", "name:"+c.getString(c.getColumnIndex("name")));Log.i("info", "age:"+c.getInt(c.getColumnIndex("age")));Log.i("info", "sex:"+c.getString(c.getColumnIndex("sex")));Log.i("info", "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");}c.close();}db.close();
2、数据库操作示例2:
import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null);db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");ContentValues values = new ContentValues();values.put("name", "张三");values.put("sex", "男");values.put("age", 19);long rowId = db.insert("stutb", null, values);values.clear();values.put("name", "张三丰");values.put("sex", "男");values.put("age", 99);db.insert("stutb", null, values);values.clear();values.put("name", "张三疯");values.put("sex", "男");values.put("age", 59);db.insert("stutb", null, values);values.clear();values.put("name", "张三峰");values.put("sex", "男");values.put("age", 39);db.insert("stutb", null, values);values.clear();values.put("name", "张三封");values.put("sex", "男");values.put("age", 29);db.insert("stutb", null, values);values.clear();values.put("sex", "女");db.update("stutb", values, "_id>?", new String[]{"3"});//将全部id>3的人的性别改成女db.delete("stutb", "name like ?", new String[]{"%丰%"});//删除所有名字中带有丰的人Cursor c = db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "name");if (c!=null) {String [] columns= c.getColumnNames();while (c.moveToNext()) {for (String columnName : columns) {Log.i("info", c.getString(c.getColumnIndex(columnName)));}}c.close();}db.close();}}
通过Android提供的SQLiteOpenHelper类,来创建打开数据库,编写一个DBOpenHelper类,继承之SQLiteOpenHelper。
import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper{public DBOpenHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}@Override//首次创建数据库的时候调用,值调用一次, 一般可以把建库 建表的操作public void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");db.execSQL("insert into stutb(name,sex,age)values('张三','女',18)");}@Override//当数据库的版本发生变化的时候 会自动执行public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}
DBOpenHelper helper =new DBOpenHelper(context, "stu.db");//helper.getReadableDatabase();//获取一个只读的数据库 只能查询 不能写入 不能更新SQLiteDatabase db = helper.getWritableDatabase();//db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)Cursor c = db.rawQuery("select * from stutb", null);if (c!=null) {String [] cols = c.getColumnNames();while (c.moveToNext()) {for (String ColumnName : cols) {Log.i("info", ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));}}c.close();}db.close();
0 0
- 【Android】数据存储之SQLite
- android数据存储之SQLite
- Android数据存储之SQLite
- Android数据存储之SQLite
- Android数据存储之SQLite
- Android之SQLite 数据存储
- Android之SQLite 数据存储
- Android 数据存储之SQLite
- Android数据存储之SQLite
- android数据存储之SQLite
- Android 数据存储之 SQLite
- Android数据存储之Sqlite
- Android数据存储之SQLite
- Android:数据存储之SQLite
- Android数据存储之SQLite
- Android数据存储之SQLite
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- nginx设置静态文件
- Fragment的生命周期
- 2014.12.10
- 根据ID读取配置中的消息显示
- 安装运行虚拟机的时候报 :VT-x/AMD-V 硬件加速器已被启动,但当前处于无效状态
- Android 数据存储之SQLite
- static作用(修饰函数、局部变量、全局变量)
- 再探Objective-C.8
- Jenkins加Shell实现最简单的持续部署
- ARM汇编初识
- 从replaceIgnoreCase说起
- 再探Objective-C.9
- handbook-fedora
- 黑马程序员──函数、数组