android sqlite 存储时间格式,android数据存储--SQLite

SQLite数据库的特点:

轻量级

独立

隔离

跨平台

多语言接口

安全性

SQLite数据类型

类型

描述

NULL

这个值为空值

VARCHAR(n)

长度不固定且其最大长度为 n 的字串,n不能超过 4000。

CHAR(n)

长度固定为n的字串,n不能超过 254。

INTEGER

整数

REAL

所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

TEXT

值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB

值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。

DATE

包含了 年份、月份、日期。

TIME

包含了 小时、分钟、秒。

SQLiteOpenHelper

SQLiteDatabase是一个辅助类。这个类主要用于生成数据库,并对数据库的版本进行管理。

SQLiteOpenHelper (Context context, String name,

SQLiteDatabase.CursorFactory factory, int version)

//第二个参数为database文件名或者为null

//第三个参数为CursorFactory用来创建cursor对象或者为null

//第四个参数为数据库版本号

SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里面的2个函数:

onCreate(SQLiteDatabase)方法

public void onCreate(SQLiteDatabase sqLiteDatabase) {

// create table Orders(Id integer primary key,

CustomName text, OrderPrice integer, Country text);

String sql = "create table if not exists " + TABLE_NAME +

" (Id integer primary key, CustomName text,

OrderPrice integer, Country text)";

sqLiteDatabase.execSQL(sql);

}

onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)方法

public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {

String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;

sqLiteDatabase.execSQL(sql);

onCreate(sqLiteDatabase);

}

创建数据库

利用SQLiteOpenHelper对象的 getWritableDatabase() 或者

getReadableDatabase()方法创建或者打开数据库:

//创建DBHelper对象,DBHelper为SQLiteOpenHelper的子类

DBHelper dbHelper = new DBHelper(SQLiteActivity.this,"stu_db",null,1);

//得到一个可读的SQLiteDatabase对象

SQLiteDatabase db =dbHelper.getReadableDatabase();

使用SQLiteDatabase的静态方法

利用openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库

插入数据

使用SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法来插入

使用insert()方法新数据(7, "Jne", 700, "China"),对于修改数据的操作我们一般当作事务(Transaction)处理:

db = DBHelper.getWritableDatabase();

db.beginTransaction();

.

ContentValues contentValues = new ContentValues();

contentValues.put("Id", 7);

contentValues.put("CustomName", "Jne");

contentValues.put("OrderPrice", 700);

contentValues.put("Country", "China");

.

db.insertOrThrow(OrderDBHelper.TABLE_NAME, null, contentValues);

//返回新插入的记录的行号

db.setTransactionSuccessful();

db.endTransaction();

ContentValues内部实现为HashMap,但是两者还是有差别的,ContenValues Key只能是String类型,Value只能存储基本类型的数据,像string,int之类的,不能存储对象。

编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行

String sql = "insert into Orders(Id, CustomName, OrderPrice, Country)

values (7, "Jne", 700, "China");"

db.execSQL(sql);

删除数据

调用SQLiteDatabase的

delete(String table,String whereClause,String[] whereArgs)方法

(参数一是表名称,参数二是删除条件,参数三是删除条件值数组)

db = DBHelper.getWritableDatabase();

db.beginTransaction();

// delete from Orders where Id in (7,8)

db.delete(OrderDBHelper.TABLE_NAME, "Id = ?", new String[]{"7", "8"});

db.setTransactionSuccessful();

编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行

修改数据

调用SQLiteDatabase的

update(String table,ContentValues values,String whereClause, String[] whereArgs)

方法。(第一个参数是表名称,第二个参数是ContentValues类型的键值对,第三个参数是更新条件(where字句),第四个参数是更新条件数组。)

db = DBHelper.getWritableDatabase();

db.beginTransaction();

// update Orders set OrderPrice = 800 where Id = 6

ContentValues cv = new ContentValues();

cv.put("OrderPrice", 800);

db.update(OrderDBHelper.TABLE_NAME, cv, "Id = ?", new String[]{String.valueOf(6)});

db.setTransactionSuccessful();

查询数据

在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。

public Cursor query(String table,String[] columns,String selection,

String[] selectionArgs,String groupBy,

String having,String orderBy,String limit);

① table: 表名称

② columns: 列名称数组

③ selection: 条件字句,相当于where

④ selectionArgs: 条件字句,参数数组

⑤ groupBy: 分组列

⑥ having: 分组条件

⑦ orderBy: 排序列

⑧ limit: 分页查询限制

⑨ Cursor: 返回值,相当于结果集ResultSet

Cursor是一个游标接口,提供了遍历查询结果的方法。Cursor游标常用方法如下:

方法名称

方法描述

getCount()

获得总的数据项数

isFirst()

判断是否第一条记录

isLast()

判断是否最后一条记录

moveToFirst()

移动到第一条记录

moveToLast()

移动到最后一条记录

move(int offset)

移动到指定记录

moveToNext()

移动到下一条记录

moveToPrevious()

移动到上一条记录

getColumnIndexOrThrow(String columnName)

根据列名称获得列索引

getInt(int columnIndex)

获得指定列索引的int类型值

getString(int columnIndex)

获得指定列缩影的String类型值

db = DBHelper.getReadableDatabase();

// select * from Orders where CustomName = 'Bor'

cursor = db.query(OrderDBHelper.TABLE_NAME, ORDER_COLUMNS, "CustomName = ?",

new String[] {"Bor"}, null, null, null);

int count = cursor.getcount();

优化

使用原始SQL语句执行效率更高,如execSQL、rawQuery

只检索有用的列、有用的行,越少越好

是否排序

是否创建索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值