数据库Dao层编增删改查写,数据库事务,数据库升级
数据库事务
有两个特点
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层编增删改查写,数据库事务,数据库升级的更多相关文章
- Delphi - cxGrid连接Oracle数据库 实现数据的增删改查
cxGrid连接Oracle数据库 实现数据的增删改查 cxGrid连接Oracle数据库 1:通过OraSession连接数据库.OraDataSet实现OraSession和OraDataSour ...
- sqlite数据库操作详细介绍 增删改查,游标
sqlite数据库操作详细介绍 增删改查,游标 本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code package com.example ...
- 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查
原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...
- abp(net core)+easyui+efcore仓储系统——展现层实现增删改查之控制器(六)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- MySQL数据库之表的增删改查
目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...
- 在python中连接mysql数据库,并进行增删改查
数据库在开发过程中是最常见的,基本上在服务端的编程过程中都会使用到,mysql是较常见的一种数据库,这里介绍python如果连接到数据库中,并对数据库进行增删改查. 安装mysql的python扩展 ...
- ABP入门系列(6)——展现层实现增删改查
这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...
- ABP入门系列(5)——展现层实现增删改查
ABP入门系列目录--学习Abp框架之实操演练 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP ...
- abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
随机推荐
- nginx基础(二)
二.nginx基础配置 (1)错误指向一个页面 http状态指向指定访问页面,在 /etc/nginx/conf.d/default.conf 中配置 error_page /50x.html; er ...
- 将short类型转换为char类型
void short2char(uint8_t *arr1, uint16_t *arr2, int len) { ; ; for (x; x < len; x++) { arr1[x++] = ...
- c#画图之柱形图
public JsonResult DrawBarChart() { #region 允许配置项 //定义宽高 , width = ; //边缘位置留白 ; ; ; ; //辅助线距离顶部的距离 ; ...
- 硬件知识整理part2--电阻在反馈网络中的应用
学而不厌,诲人不倦,不知老之将至.--孔子 电阻作为电路中基本的元器件之一.在电路设计中,我们有时会使用欧姆定律来大致估计一下电阻值的大小,但是大多时候我们是不用去过多考虑电阻值的大小,像我这样大方的 ...
- [Linux] git add时的注意事项
git add -A 提交所有变化 git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) git add . 提交新文件(new)和被修改( ...
- (办公)记事本_linux压缩命令
参考谷粒学院的linux视频教程:http://www.gulixueyuan.com/course/300/task/7091/show 在Linux中可以识别的常见的压缩格式有十几种,比如&quo ...
- CF #618 div.2
序 闲来无事,打场CF,本人蒟蒻,考场A了前三道,第四有解答 正文 T1 Non-zero 是道水题.... 给你一个序列a.要求你输出最少的操作次数使这个序列的累和与累乘都不为0: 一次操作指给\( ...
- malloc分配内存的结构
在C/C++,我们都可以使用malloc进行分配大小,单位是字节. malloc实际分配的内存大小和传入的参数其实是不同的. 实际分配的内存大小>传入的参数大小. malloc分配的内存 ...
- Xamarin.Forms登录对话框及表单验证
微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏. Xamarin.Forms登录系统 内容目录 实现效果 业务场景 编码实现 ...
- jQuery笔记(一)jQuery选择器
一.前言 编写任何javascript程序我们要首先获得对象, jQuery选择器能彻底改变我们平时获取对象的方式, 可以获取几乎任何语意的对象, 比如"拥有title属性并且值中包含tes ...