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

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

学习安卓的时候难免会想想,安卓的数据库跟一般的java web有啥区别,然后课后回来查了查资料学习了一下,发现SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID 事务。

安卓创建数据库流程概述

Android专门提供了一个 SQLiteOpenHelper 帮 助类,借助这个类就可以非常简单地对数据库进行创建。既然有好东西可以直接使用。

 

知道 SQLiteOpenHelper 是一个抽象类,这表示如果我们想要使用它, 就需要创建一个自己的类去继承。SQLiteOpenHelper 中有两个抽象方法,分别是 onCreate()和 onUpgrade(),我们必须在自己的类里面重写这两个方法,然后分别在这两 个方法中去实现创建数据库。

SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。

 

在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的

 OnCreate中(SQLiteDatabase db) :创建数据库时调用

 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):作出修改数据库调用。

 创建数据库

public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
   
  db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
    colDeptName+ " TEXT)");
   
  db.execSQL("CREATE TABLE "+employeeTable+"
    ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
        colName+" TEXT, "+colAge+" Integer, "+colDept+"
    INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES
    "+deptTable+" ("+colDeptID+"));");
  db.execSQL("CREATE TRIGGER fk_empdept_deptid " +
    " BEFORE INSERT "+
    " ON "+employeeTable+
     
    " FOR EACH ROW BEGIN"+
    " SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+"
    WHERE "+colDeptID+"=new."+colDept+" ) IS NULL)"+
    " THEN RAISE (ABORT,'Foreign Key Violation') END;"+
    "  END;");
   
  db.execSQL("CREATE VIEW "+viewEmps+
    " AS SELECT "+employeeTable+"."+colID+" AS _id,"+
    " "+employeeTable+"."+colName+","+
    " "+employeeTable+"."+colAge+","+
    " "+deptTable+"."+colDeptName+""+
    " FROM "+employeeTable+" JOIN "+deptTable+
    " ON "+employeeTable+"."+colDept+" ="+deptTable+"."+colDeptID
    );
  //Inserts pre-defined departments
  InsertDepts(db); 
 }
 
SQL使用
db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
    colDeptName+ " TEXT)");
 
更新值(update)
 执行 db.execSQL或者执行
db.update
public int UpdateEmp(Employee emp)
  {
   SQLiteDatabase db=this.getWritableDatabase();
   ContentValues cv=new ContentValues();
   cv.put(colName, emp.getName());
   cv.put(colAge, emp.getAge());
   cv.put(colDept, emp.getDept());
   return db.update(employeeTable, cv, colID+"=?",
    new String []{String.valueOf(emp.getID())});  
  }
 
删除行
 执行 db.execSQL或执行 db.delete方法
public void DeleteEmp(Employee emp)
  {
   SQLiteDatabase db=this.getWritableDatabase();
   db.delete(employeeTable,colID+"=?", new String [] {String.valueOf(emp.getID())});
   db.close();
  }
查询
执行 db.rawQuery 或执行 db.query
Cursor getAllDepts()
  {
   SQLiteDatabase db=this.getReadableDatabase();
   Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,
    "+colDeptName+" from "+deptTable,new String [] {});
    
   return
cur;
  
}

转载于:https://www.cnblogs.com/syd77/p/7028073.html

你可能感兴趣的文章
sessiondataOracle alert 文件分析
查看>>
空格样例HDU1241:Oil Deposits
查看>>
按钮添加Android初学者的积累
查看>>
MAC如何开启ROOT账户
查看>>
D3(v5) in TypeScript 坐标轴之 scaleBand用法
查看>>
iOS中关于NavigationController中preferredStatusBarStyle一直不执行的问题
查看>>
Tutorial 4: Authentication & Permissions
查看>>
构建知识图谱,让自己更值钱
查看>>
java 相关软件使用趋势
查看>>
RednaxelaFX:软件工程师、主攻高级编程语言虚拟机的设计与实现
查看>>
C 笔记
查看>>
编译openjdk源码
查看>>
MYSQL 学习笔记1 -----mysqladmin -uroot -p status|extended-status
查看>>
新浪云技术博客
查看>>
Centos rsync+inotify 实现数据同步备份
查看>>
深入理解《字符指针与字符数组真正的区别》
查看>>
青鸟资料下载
查看>>
基于visual Studio2013解决算法导论之012计数排序
查看>>
kinect for windows - DepthBasics-D2D详解之二
查看>>
JQuery写的一个简单的分页插件-2
查看>>