数据变化提示保存

/**取对象序列化后的MD5值*/
public static String md5(Object data) throws Exception
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    new ObjectOutputStream(baos).writeObject(data);
    
    byte[] array = MessageDigest.getInstance("MD5").digest(baos.toByteArray());
    
    StringBuffer sb = new StringBuffer(32);
    for (int i = 0; i < array.length; i++) {//array.length = 16
        /*3位16进制数取后两位*/
        sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));  
    }
    
    return sb.toString();
}

public static void main(String[] args) throws Exception
{
    /*准备3行3列的数据*/
    Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
    Vector<Object> row1 = new Vector<Object>();
    row1.add(1);row1.add("张三");row1.add(new Date());
    rowData.add(row1);
    
    Vector<Object> row2 = new Vector<Object>();
    row2.add(2);row2.add("李四");row2.add(new Date());
    rowData.add(row2);
    
    Vector<Object> row3 = new Vector<Object>();
    row3.add(3);row3.add("王五");row3.add(new Date());
    rowData.add(row3);
    
    /*表头名称*/
    Vector<String> columnNames = new Vector<String>();
    columnNames.add("序号");columnNames.add("姓名");columnNames.add("日期");
    
    //JTable(Vector rowData, Vector columnNames)
    JTable table = new JTable(rowData, columnNames);
    JFrame frame = new JFrame("Test");
    frame.getContentPane().add(new JScrollPane(table));
    frame.setSize(800, 600);frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    
    String data0 = md5(rowData);
    /*1、什么也没做数据没有变化,不会提示保存*/
    if(!data0.equals(md5(rowData)))JOptionPane.showMessageDialog(frame, "提示1:是否保存修改?");
    
    /*2、修改某个单元格的值,内容发送了变化,会提示保存*/
    rowData.get(0).set(1, "张三1");table.repaint();
    if(!data0.equals(md5(rowData)))JOptionPane.showMessageDialog(frame, "提示2:是否保存修改?");
    
    /*3、单元格改回原来的值,内容没有变化,不会提示保存*/
    rowData.get(0).set(1, "张三");table.repaint();
    if(!data0.equals(md5(rowData)))JOptionPane.showMessageDialog(frame, "提示3:是否保存修改?");
    
}
时间: 2024-11-07 07:17:59

数据变化提示保存的相关文章

Entity Framework使用EntityState和Attach来保存数据变化以及更新实体的个别字段

在使用Entity Framework作为ORM来存取数据的过程中,最常规的操作就是对数据对象的更新.本文将会包含如何Attach Entity到一个数据Context中,以及如何使用EntityState字段状态来保存数据变化. 文本参考了如下两篇文章: https://msdn.microsoft.com/en-us/data/jj592676 https://stackoverflow.com/questions/30987806/dbset-attachentity-vs-dbconte

Adapter数据变化改变现有View的实现原理及案例

首先说说Adapter具体的类的继承关系,如下图 Adapte为接口它的实现类的对象作为AdapterView和View的桥梁,Adapter是装载了View(比如ListView和girdView要显示的数据).相关View要显示的数据完全与View解耦.View要显示的数据从Adapter里面获取并展现出来:Adapter负责把真实的数据是配成一个个View(每一条数据对应一个View)让GirdView等类似的组件来显示这些是配好的一个个View,.也就是说View要显示什么数据取决于Ad

Android ContenObserver 监听联系人数据变化

一.知识介绍 1.ContentProvider是内容提供者 ContentResolver是内容解决者(对内容提供的数据进行操作) ContentObserver是内容观察者(观察内容提供者提供的数据变化) 2.ContentObserver需要ContentResolver进行注册. resolver.registerContentObserver(uri,true,observer): ①URI(第一个参数):该监听所监听ContentProvider的Uri ②notifyForDesc

大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Core 实例练习

第1章 RDD 概念1.1 RDD 为什么会产生1.2 RDD 概述1.2.1 什么是 RDD1.2.2 RDD 的属性1.3 RDD 弹性1.4 RDD 特点1.4.1 分区1.4.2 只读1.4.3 依赖1.4.4 缓存1.4.5 CheckPoint第2章 RDD 编程2.1 RDD 编程模型2.2 RDD 创建2.2.1 由一个已经存在的 Scala 集合创建,即集合并行化(测试用)2.2.2 由外部存储系统的数据集创建(开发用)2.3 RDD 编程2.3.1 Transformatio

v3学院带你学习-时序逻辑中时钟上升沿对齐数据变化时的处理技巧的FPGA实现

此文章为原创出自 V3学院 www.v3edu.org 时序逻辑中,数据都是在时钟的上升沿或者下降沿时刻进行采样的,以上升沿为例,时钟采数据时应该采的是时钟上升沿左边变量的值,运算的结果体现在时钟上升沿的右边,但是,在用modelsim等一些仿真工具进行仿真的时候,如果时钟上升沿刚好和数据变化对齐,就会出现与上述理论不一致的原因,如下仿真波形图: 上图中的例子是用时钟上升沿控制变量a和b按位或运算并且把结果赋值给c的小实验,根据前面说的理论,黄线位置处,时钟上升沿采的变量a和b的值都为0,进行或

HTML5使用local storage存储的数据是如何保存在本地的

HTML5使用local storage存储的数据是如何保存在本地的?(我使用的是chrome浏览器,chrom浏览器是用sqlite来保存本地数据的) HTML5 的local storage 是通过浏览器在本地存储的数据. 基本使用方法如下: <script type="text/javascript"> localStorage.firstName = "Tom"; alert(localStorage.firstName); </scrip

Angularjs【监听数据的变化】和【如何修改数据】和【数据变化的传播】

一:监听数据的变化: 由于编译仅仅在启动引导时执行一次,这意味着我们的link函数只会被调用一次,那么, 如果数据变化,在界面上将不会有任何反馈,即界面和数据将变得不同步了. 这需要持续监听数据的变化. 好在AngularJS的scope对象可以使用$watch()方法,对建立在其上的变量的变化进行监听: watch(watchExpression,listener,[objectEquality]);watch方法要求传入三个参数: watchExpression - 要监听的表达式,比如:"

Oracle 数据操作提示“记录被另一个用户锁住”

oracle数据中删除数据时提示“记录被另一个用户锁住” 解决方法: 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id=l.object_id

Atitit. BigConfirmTips 控件 大数据量提示确认控件的原理and总结O9

Atitit. BigConfirmTips 控件 大数据量提示确认控件的原理and总结O9 1. 主要的涉及的技术 1 2. 主要的流程 1 3. 调用法new confirmO9t(); 1 4. 设置确认在后的回溯事件 c.backHandle="window.opener.confirmSubmitBackeventHandle"; 2 5. 设置详细表格显示模板  c.tmplt="/publish/lookOverdetail_templt.jsp";