数据库事务

有两个特点

1.安全性

情景:正常的转账行为,这个时候如果出现停电等异常,已经扣钱但是没有加钱;这个时候就可用数据库事务解决问题

2.高效性:

使用数据库事务添加享受同数量的数据,对比耗时少:

原理:没开始事务的是打开数据库,插入数据,关闭数据库:

    开启事务的是数据存到内存,然后一次写入到数据库;

数据库升级

升级的时候版本号必须要大于等于2;而且要大于上一版本;

 package com.example.databasedemo;

 import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; import androidx.annotation.Nullable; public class DataBaseHelper extends SQLiteOpenHelper { private static final String TGA ="DatabaseHelper"; public DataBaseHelper(@Nullable Context context) {
super(context, Constants.DATABASE_NAME, null, Constants.VRESION_CODE);
} @Override
public void onCreate(SQLiteDatabase db) {
//创建时回调
Log.d(TGA,"创建数据库。。。");
//创建字段
//sql creat table table_name(
String sql="create table "+Constants.TABLE_NAME+"(_id integer,name varchar,age integer,salary integer)";
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//升级时回调
Log.d(TGA,"升级数据库。。。"); String sql;
//db.execSQL(sql); switch (oldVersion)
{
case 1: sql="alert table "+Constants.TABLE_NAME+" add address varchar";
db.execSQL(sql);
break; case 2:
sql="alert table "+Constants.TABLE_NAME+" add phone integer ,address varchar";
db.execSQL(sql);
break; } }
}

Dao层编写增删改查

与javaweb大体相同,只是代码有些不一样

 package com.example.databasedemo;

 import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log; import java.security.AccessControlContext; public class Dao { private static final String TAG="Dao";
private final DataBaseHelper mHelper; public Dao(AccessControlContext context){ mHelper =new DataBaseHelper(context);
} public void insert(){
SQLiteDatabase db= mHelper.getWritableDatabase();
String sql ="insert into "+Constants.TABLE_NAME +" (_id ,name ,age,salary,phone,address) values (?,?,?,?,?,?)";
db.execSQL(sql,new Object[]{1,"BillGates",60,1,110,"USA"});
db.close();
} public void delete(){
SQLiteDatabase db= mHelper.getWritableDatabase();
String sql ="delete from "+Constants.TABLE_NAME +" where age = 60";
db.execSQL(sql);
db.close();
} public void update(){
SQLiteDatabase db= mHelper.getWritableDatabase();
String sql ="update from "+Constants.TABLE_NAME +" set salary= 2 where age = 60";
db.execSQL(sql);
db.close();
} public void query(){ SQLiteDatabase db= mHelper.getWritableDatabase();
String sql ="select form "+Constants.TABLE_NAME +" ";
Cursor cursor =db.rawQuery(sql,null); while (cursor.moveToNext()){
int index=cursor.getColumnIndex("name");
String name =cursor.getColumnName(index);
Log.d(TAG,"name=="+name);
}
cursor.close();
db.execSQL(sql);
db.close();
}
}

数据库Dao层编增删改查写,数据库事务,数据库升级的更多相关文章

  1. Delphi - cxGrid连接Oracle数据库 实现数据的增删改查

    cxGrid连接Oracle数据库 实现数据的增删改查 cxGrid连接Oracle数据库 1:通过OraSession连接数据库.OraDataSet实现OraSession和OraDataSour ...

  2. sqlite数据库操作详细介绍 增删改查,游标

    sqlite数据库操作详细介绍 增删改查,游标     本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code     package com.example ...

  3. 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查

    原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...

  4. abp(net core)+easyui+efcore仓储系统——展现层实现增删改查之控制器(六)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  5. MySQL数据库之表的增删改查

    目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...

  6. 在python中连接mysql数据库,并进行增删改查

    数据库在开发过程中是最常见的,基本上在服务端的编程过程中都会使用到,mysql是较常见的一种数据库,这里介绍python如果连接到数据库中,并对数据库进行增删改查. 安装mysql的python扩展 ...

  7. ABP入门系列(6)——展现层实现增删改查

    这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...

  8. ABP入门系列(5)——展现层实现增删改查

    ABP入门系列目录--学习Abp框架之实操演练 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. 转:静态链表及其创建(C语言实现)

    http://c.biancheng.net/view/3339.html 折半插入排序算法(C语言代码实现) http://c.biancheng.net/view/3440.html 二叉树层次遍 ...

  2. JavaScript的语法、数据类型、基本算数和逻辑运算操作

    str.toString() 可以把字符串.数值.布尔值.对象转为字符串 String(str) 任何数值强制转换为字符串类型 <!DOCTYPE html> <html lang= ...

  3. Maven国内镜像配置(阿里云)-sunziren

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  4. react typescript react-router

    typescript 1 connected-react-router

  5. Chapter2二分与前缀和

    Chapter 2 二分与前缀和 +++ 二分 套路 如果更新方式写的是R = mid, 则不用做任何处理,如果更新方式写的是L = mid,则需要在计算mid是加上1. 1.数的范围 789 #in ...

  6. [CF1311F] Moving Points - 树状数组

    Solution 按 \(x\) 关键字升序排序,依次枚举每个点 考虑对任意 \(x_j < x_i\),那么当 \(v_j \leq v_i\) 时,它们不会相交,且 \(dis\) 就是它们 ...

  7. Antenna Placement poj 3020

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12104   Accepted: 595 ...

  8. Java出现次数最多的整数

    描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两个元 ...

  9. win10家庭版更改本地账户名、C盘Users下文件夹名和环境变量等

    PS:由于四五年前装系统的时候懵懵懂懂的敲了一个中文用户名(有一个字还打错了,尴尬),导致现在打开cmd默认是C:\Users\中文名,path环境变量中也有中文路径,有时候有些程序的路径也是中文,这 ...

  10. 虚拟机ifconfig 没有IP地址显示

    虚拟机centos 找不到IP地址 -----------------下图解决后有ip地址----------------------- 1.  查看网络IP和网关     >>1.  查 ...