博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite数据库
阅读量:5881 次
发布时间:2019-06-19

本文共 4561 字,大约阅读时间需要 15 分钟。

嵌入式关系型SQLite

可以把各种类型数据保存在任何字段,不用关心字段声明的类型。

Integer PRIMARY KEY只能保存64位整数

声明的类型长度无效

当调用getReadableDatabase()getWritableDatabase()时才会创建数据库。

 

查询分页:

select * from Account limit 3 5

跳过前3条数据 取后面5条数据

 

用户第一次使用软件时,自动创建数据库

extends SQLiteOpenHelper

onCreate()第一次创建数据库使用,仅执行一次

onUpdate()版本号改变,数据库版本升级时调用

 

一个数据库以一个文件存在

class DBUtils extends SQLiteOpenHelper{   public DBUtils(Context context, String name, CursorFactory factory,int version) {      super(context, "lyj.db", null, 2);//null使用系统自带游标工厂  }   @Override  public void onCreate(SQLiteDatabase db) {      db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20))");  }   @Override  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      db.execSQL("alter table person add phone varchar(12) null");  }}

getReadableDatabasegetWritableDatabase区别? 

都可以获取一个用于操作数据库的SQLiteDatabase实例

getReadableDatabase()方法中会调用getWritableDatabase()方法

数据库可设置最大容量,getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错

 

ContentValues用于存放各字段值

public void saveDB(Person person) {  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  // 1  db.execSQL("insert into person(name,age,phone) values (?,?,?)",new Object[] { person.getName(), person.getAge(), person.getPhone() });  // 2  ContentValues values = new ContentValues();  values.put("name", person.getName());  values.put("age", String.valueOf(person.getAge()));  db.insert("person", null, values);  // 如果第3个字段为null就会拼接sql语句为如下:(如确定第3个字段一定不为null,第2字段可写为null)  // db.insert("person", "name", null); ==>insert into person(name) values(null)  // db.close(); //本用户本应用使用,关不关不大影响性能} public void deleteDB(Integer id) {  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  db.execSQL("delete from person where personid = ?", new Object[] { id });  // db.delete("person", "personid = ?", new String[] { id.toString() });} public void updateDB(Person person) {  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  // 1  db.execSQL("update person set name = ?,age = ?,phone = ? where personid = ?)",new Object[] { person.getName(), person.getAge(), person.getPhone(), person.getId() });  // 2  ContentValues values = new ContentValues();  values.put("name", person.getName());  values.put("phone", person.getPhone().toString());  db.update("person", values, "personid = ?", new String[] { String.valueOf(person.getId())});} public Person findDB(Integer id) {  SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  // 1  Cursor cursor = db.rawQuery("select * from person where personid = ?)",new String[] { id.toString() });  // 2 第2参数:null返回所有字段  Cursor cursor2 = db.query("person", null, "personid = ?", new String[] { id.toString() },null, null, null);  if (cursor.moveToFirst()) {
// 仅有一条记录   String name = cursor.getString(cursor.getColumnIndex("name"));   Integer age = cursor.getInt(cursor.getColumnIndex("age"));    // ...    cursor.close();    return new Person(name, age);  }  return person;} public List
getScrollData(int offset, int maxSize) {  List
persons = new ArrayList
();  SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  Cursor cursor = db.rawQuery("select * from person limit ?,?)",new String[] { String.valueOf(offset), String.valueOf(maxSize) });  //按personid 排序 limit 3,5  Cursor cursor2 = db.query("person", null, null, null, null, null, "personid asc", offset+ "," + maxSize);  while (cursor.moveToNext()) {    String name = cursor.getString(cursor.getColumnIndex("name"));    Integer age = cursor.getInt(cursor.getColumnIndex("age"));    // ...   persons.add(new Person(name, age));  }  cursor.close();  return persons;} // 统计public long getCount() {  SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  Cursor cursor = db.rawQuery("select count(*) from person)", null);  Cursor cursor2 = db.query("person", new String[]{"count(*)"}, null, null, null, null, null);  if (cursor.moveToFirst()) {
// 仅有一条记录   long count = cursor.getColumnCount();   cursor.close();    return count;  }  return 0;} 数据库事务// 事务public void transferAccount() {  SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  try {    db.beginTransaction();    db.execSQL("update person set amount= amount-10 where personid =2");    db.execSQL("update person set amount= amount+10 where personid =3");    db.setTransactionSuccessful();  } finally {   //保证结束事务一定执行   db.endTransaction();// 默认:回滚(事务标识为true为提交)  }}

转载于:https://www.cnblogs.com/liyuejiao/p/4257006.html

你可能感兴趣的文章
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
那些年追过的......写过的技术博客
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>