精华内容
下载资源
问答
  • Java获取Oracle数据库序列值
    2021-02-12 15:22:54

    import javax.sql.DataSource;

    import org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer;

    import com.sinotrans.framework.core.util.ContextUtils;

    public class OracleSequence {

    private static DataSource ds = null;

    //静态初始化一个数据源

    static {

    if (ds == null)

    ds = (DataSource) ContextUtils.getBean("dataSource");

    }

    //定义静态方法

    public static String getNextVal(String seqName) {

    OracleSequenceMaxValueIncrementer incr = new OracleSequenceMaxValueIncrementer(ds, seqName);

    return incr.nextStringValue();

    }

    //定义静态方法

    public static Long getNextValLong(String seqName) {

    OracleSequenceMaxValueIncrementer incr = new OracleSequenceMaxValueIncrementer(ds, seqName);

    return incr.nextLongValue();

    }

    }

    更多相关内容
  • 该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public List findAll() { List list = new ArrayList();... } 然后怎么在就是测试类里面写获得这个新增的序列值,就是customerId.....大神写一句来助我,我是菜鸟~

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    public List findAll() {

    List list = new ArrayList<>();

    PreparedStatement stmt = null;

    ResultSet rs = null;

    try{

    String sql = "select customer_id,customer_name,customer_account,sex,customer_password,email,phone,credits from customer order by customer_id desc";

    stmt = conn.prepareStatement(sql);

    rs = stmt.executeQuery();

    while(rs.next()){

    int customerId = rs.getInt("customer_id");

    String customerName = rs.getString("customer_name");

    String customerAccount = rs.getString("customer_account");

    String sex = rs.getString("sex");

    String customerPassword = rs.getString("customer_password");

    String email = rs.getString("email");

    String phone = rs.getString("phone");

    Double credits = rs.getDouble("credits");

    list.add(new Customer(customerId,customerName,customerAccount,sex,customerPassword,email,phone,credits));

    }

    }catch(SQLException e){

    e.printStackTrace();

    throw new QXcmsException("查询客户信息失败");

    }finally{

    DBUtil.closeAll(null, stmt, rs);

    }

    return list;

    }

    然后怎么在就是测试类里面写获得这个新增的序列值,就是customerId.....大神写一句来助我,我是菜鸟~

    展开全文
  • package ...import java.io.fileinputstream;import java.io.fileoutputstream;import java.io.ioexception;import java.io.objectinputstream;import java.io.objectoutputstream;import java.ut...

    package com.chen.seriaizable;

    import java.io.fileinputstream;

    import java.io.fileoutputstream;

    import java.io.ioexception;

    import java.io.objectinputstream;

    import java.io.objectoutputstream;

    import java.util.arraylist;

    import java.util.list;

    public class savestudent

    {

    private student student;

    // 序列化文件保存位置

    private string path = "c:/student.serializable";

    public void writestudent()

    {

    list students = new arraylist();

    student = new student();

    student student1 = new student();

    student1.setage(1);

    student1.setid("1");

    student1.setname("张1");

    students.add(student1);

    student student2 = new student();

    student2.setage(2);

    student2.setid("2");

    student2.setname("张2");

    students.add(student2);

    student student3 = new student();

    student3.setage(3);

    student3.setid("3");

    student3.setname("张3");

    students.add(student3);

    student student4 = new student();

    student4.setage(4);

    student4.setid("4");

    student4.setname("张4");

    student student41 = new student();

    student41.setage(41);

    student41.setid("41");

    student41.setname("张41");

    list students4 = new arraylist();

    students4.add(student41);

    student4.setstudents(students4);

    students.add(student4);

    student.setage(500);

    student.setid("100");

    student.setname("张a000");

    student.setstudents(students);

    try

    {

    objectoutputstream objectoutputstream = new objectoutputstream(new fileoutputstream(path));

    objectoutputstream.writeobject(student);

    objectoutputstream.close();

    }

    catch (ioexception e)

    {

    // todo auto-generated catch block

    e.printstacktrace();

    }

    system.out.println("写完");

    }

    public void readstudent()

    {

    try

    {

    objectinputstream objectinputstream = new objectinputstream(new fileinputstream(path));

    student = (student) objectinputstream.readobject();

    system.out.println(student.getage());

    objectinputstream.close();

    }

    catch (exception e)

    {

    e.printstacktrace();

    }

    system.out.println("读完");

    }

    @override

    public string tostring()

    {

    readstudent();

    stringbuffer stringbuffer = new stringbuffer(100);

    studenttostring(stringbuffer, student);

    return stringbuffer.tostring();

    }

    public void studenttostring(stringbuffer stringbuffer, student studentobj)

    {

    if (student != null)

    {

    stringbuffer.append("id:" + studentobj.tostring()).append("\n");

    if (studentobj.getstudents() != null)

    {

    stringbuffer.append("\n[\n");

    for (student bean : studentobj.getstudents())

    {

    studenttostring(stringbuffer, bean);

    }

    stringbuffer.append("\n]\n");

    }

    }

    }

    }

    展开全文
  • 介绍了Java获取最后插入MySQL记录的自增ID的3种方法,有需要的朋友可以参考需要
  • 1 场景java对象某些时候,需要序列化成字符串存储在数据库中,需要的时候,再将字符串反序列化为java对象。如使用shiro缓存分布式session,需要将session对象序列化成字符串存储在redis中,来达到分布式应用共享...

    1 场景

    java对象某些时候,需要序列化成字符串存储在数据库中,需要的时候,再将字符串反序列化为java对象。

    如使用shiro缓存分布式session,需要将session对象序列化成字符串存储在redis中,来达到分布式应用共享session的功能。

    为什么不序列化成json?

    ​ java对象同样可以转换为json,需要的时候,再转换为java对象。这种情况一般只适用转换自己创建的javaBean对象,如果类是非自己管理的javaBean,对象内部存在没有对外开放set/get方法的属性,转换后将丢失。

    ​ 序列化自己javaBean对象的好处是,通过序列化后的json字符串,可以很清楚知道被序列化的java对象的内容。

    2 应用

    2.1 过程描述

    序列化过程:

    (1)java对象通过对象输出流ObjectOutputStream,写入到内存字节数组输出流ByteArrayOutputStream中

    (2)通过内存字节数组输出流ByteArrayOutputStream获取字节数组byte[]

    (3)字节数组根据自定义算法转换成字符串(hex/base64等)

    反序列化过程:

    (1)被序列化后字符串,根据字节数组转换字符串的算法,转换为字节数组byte[]

    (2)字节数组通过内存字节数组输入流ByteArrayInputStream写入到对象输入流ObjectInputStream

    (3)通过对象输入流ObjectInputStream读取java对象

    2.2 字节数组、字符串转换

    字节数组转码成字符串依赖如下maven包:

    commons-codec

    commons-codec

    1.14

    2.2.1 hex转码

    (1)字节数组hex转码

    public static String bytesToString(byte[] bytes) {

    //转换成hex

    return org.apache.commons.codec.binary.Hex.encodeHexString(bytes);

    }

    (2)字符串hex反转码成字节数组

    public static byte[] stringToByte(String str) throws DecoderException {

    //转换成hex

    return org.apache.commons.codec.binary.Hex.decodeHex(str);

    }

    2.2.2 base64转码

    建议此种方式

    (1) 字节数组base64转码

    public static String bytesToString(byte[] bytes) {

    //转换成base64

    return org.apache.commons.codec.binary.Base64.encodeBase64String(bytes);

    }

    (2) 字符串base64反转码成字节数组

    public static byte[] stringToByte(String str) throws DecoderException {

    //转换成base64

    return org.apache.commons.codec.binary.Base64.decodeBase64(str);

    }

    2.3 对象序列化字节数组

    字节数组、字符串转换使用2.2中定义的转换方法:bytesToString、stringToByte

    2.3.1 使用commons-lang3包实现对象序列化

    建议此种方式,代码简单

    maven依赖如下:

    org.apache.commons

    commons-lang3

    3.10

    代码如下:

    (1)java对象序列化成字符串

    public static String serialize(Serializable obj) throws Exception{

    if(obj!=null) {

    byte[] bytes = SerializationUtils.serialize(obj);

    return bytesToString(bytes);

    }

    return null;

    }

    (2)字符串反序列化成java对象

    public static T deserialize(String str) throws Exception{

    if(StringUtils.isNotEmpty(str)){

    return SerializationUtils.deserialize(stringToByte(str));

    }

    return null;

    }

    2.3.2 编码实现对象序列化

    代码如下:

    (1)java对象序列化成字符串

    public static String serialize(Serializable obj) throws Exception{

    if(obj!=null) {

    ByteArrayOutputStream bos=null;

    ObjectOutputStream oos=null;

    try {

    bos=new ByteArrayOutputStream();

    oos=new ObjectOutputStream(bos);

    oos.writeObject(obj);

    byte[] bytes = bos.toByteArray();

    return bytesToString(bytes);

    } catch (Exception e) {

    e.printStackTrace();

    throw new Exception("序列化对象失败:"+String.valueOf(obj));

    }finally {

    try {

    if(bos!=null){

    bos.close();

    }

    if(oos!=null){

    oos.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    return null;

    }

    (2)字符串反序列化成java对象

    public static T deserialize(String str) throws Exception{

    if(StringUtils.isNotEmpty(str)){

    ByteArrayInputStream bai=null;

    ObjectInputStream ois=null;

    try{

    bai=new ByteArrayInputStream(stringToByte(str));

    ois=new ObjectInputStream(bai);

    return (T)ois.readObject();

    }catch (Exception e){

    e.printStackTrace();

    throw new Exception("字符串反序列化对象失败:"+String.valueOf(str));

    }finally {

    try {

    if(ois!=null){

    ois.close();

    }

    if(bai!=null){

    bai.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    return null;

    }

    2.4 完整工具类代码

    2.4.1 maven依赖

    org.apache.commons

    commons-lang3

    3.10

    commons-codec

    commons-codec

    1.14

    2.4.2 java代码

    package com.demo.cs.template.util;

    import org.apache.commons.codec.DecoderException;

    import org.apache.commons.lang3.SerializationUtils;

    import org.apache.commons.lang3.StringUtils;

    import java.io.*;

    /**

    * 序列化工具类

    */

    public class SerializeUtil {

    /**

    * 字节数组转换为字符串

    */

    public static String bytesToString(byte[] bytes) {

    字符串、字节数组转换方式很多,可以根据自己的要求,自定义转换方式

    //转换成hex

    //return org.apache.commons.codec.binary.Hex.encodeHexString(bytes);

    //转换成base64

    return org.apache.commons.codec.binary.Base64.encodeBase64String(bytes);

    }

    /**

    * 字符串转换为字节数组

    * @param str

    * @return

    */

    public static byte[] stringToByte(String str) throws DecoderException {

    字符串、字节数组转换方式很多,可以根据自己的要求,自定义转换方式

    //转换成hex

    //return org.apache.commons.codec.binary.Hex.decodeHex(str);

    //转换成base64

    return org.apache.commons.codec.binary.Base64.decodeBase64(str);

    }

    /**

    * 序列化对象(依赖commons-lang3包)

    * @param obj 序列化对象

    * @return 对象序列化之后的字符串

    */

    public static String serialize(Serializable obj) throws Exception{

    if(obj!=null) {

    byte[] bytes = SerializationUtils.serialize(obj);

    return bytesToString(bytes);

    }

    return null;

    }

    /**

    * 反序列化对象(依赖commons-lang3包)

    * @param str 反序列化字符串

    * @return 反序列化之后的对象

    */

    public static T deserialize(String str) throws Exception{

    if(StringUtils.isNotEmpty(str)){

    return SerializationUtils.deserialize(stringToByte(str));

    }

    return null;

    }

    }

    3 限制

    3.1 序列化前置条件

    java对象可序列化成字节数组的前提是:

    java类必须实现序列化接口:Serializable,此接口代表该类的实例化对象,可以进行序列化(对象内的内置属性,也需要实现此接口)。

    如不实现此接口,序列化成对象时,将抛出异常:java.io.NotSerializableException

    为防止调用工具类的时候,参数未实现此接口,可在工具类指定参数或返回值泛型的类型:

    public static String serialize(Serializable obj) throws Exception{...}

    public static T deserialize(String str) throws Exception{...}

    3.2 字节数组转换字符串

    对象序列化后,是以字节数组的形式存在,需要将字节数组转码成可读的字符串。上面有hex和base64转码示例。

    无论以哪种方式转码和反转码,均需采用一样的算法。

    3.3 序列化时忽略属性

    如对象属性被关键字transient所修饰,对象序列化时,将会忽略此属性。如下:

    private transient String userName;

    4 扩展

    4.1 hex和base64

    (1)含义

    java中有可见字符和不可见字符的区分,不可见字符在输出字符串的时候无法看到。如将字节数组转换成字符串,需要先根据编码规则将字节数组转换成字符数组,再将字符数组转换成字符串,由于部分转换后的字符是不可见的,此类字符无法转换成可见的字符串,将存在数据的丢失。在将字节数组转换成对应的字节时,hex和base64可以将不可见字符转换成可见字符,实现数据的二进制安全转换。

    hex和base64都是编码方式和加密无关,将字节数组编码为可见的字符串。

    hex的意思是16进制,编码后大小变为2倍,一个字符用两个可见字符来表示。

    base64如字面意思,64进制来表示数组,编码后大小变成4/3倍,3个字符用4个可见字符来表示。

    (2)编码速度

    hex编码解码速度比base64快,hex速度更快。

    (3)编码后大小

    base64编码后字符串大小比hex小,base64占用空间更小。

    (4)转换后格式

    hex编码后内容如下:

    aced000573720022636f6d2e64656d6f2e63732e74656d706c6174652e6265616e2e54656d7055736572a55d364cf96782ab0200024c00036167657400134c6a6176612f6c616e672f496e74656765723b4c0008757365724e616d657400124c6a6176612f6c616e672f537472696e673b7870737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b020000787000000012740006e5bca0e4b889

    base64编码后内容如下:

    rO0ABXNyACJjb20uZGVtby5jcy50ZW1wbGF0ZS5iZWFuLlRlbXBVc2VypV02TPlngqsCAAJMAANhZ2V0ABNMamF2YS9sYW5nL0ludGVnZXI7TAAIdXNlck5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAASdAAG5byg5LiJ

    4.2 base32

    还有种编码方式base32,如字面意思,32进制来转码字符数组。可酌情使用

    展开全文
  • java安全(五)java序列

    千次阅读 2022-03-27 14:02:42
    序列化 在调用RMI时,发现接收发送数据都是反序列化数据. 例如JSON和XML等语言,在网络上传递信息,都会用到一些格式化数据,大多数处理方法中,JSON和XML...RMI使用java等语言内置的序列化方法,将一个对象转化成一串二进制
  • 我有一个在5个应用服务器上运行的分布式Java应用程序服务器都使用在第6台机器上运行的相同Oracle 9i数据库.应用程序需要从序列中预取一批100个ID.在单线程,非分布式环境中相对容易,您可以发出以下查询:select seq....
  • Java序列化之反射机制

    千次阅读 2021-12-07 20:18:03
    每次听到大佬在讲或者看论坛等一些方式学java反序列化漏洞时,都会有一个词叫做反射机制,大佬顺势借着这个词,就给你造出一个payload,对于刚学java序列化的我们,可能有点会懵圈,反正我是懵了,所以就赶紧学了...
  • Java序列化总结(最全)

    2021-03-06 20:58:54
    概念实现 Serializable 接口, 它只是一个标记接口,不实现也能够进行序列化RMI: 远程方法调用RPC: 远程过程调用序列化ID解决了序列化与反序列出现代码不一致的问题, 不一致将导致序列化失败private static final long...
  • java基础-枚举序列

    2021-02-12 18:20:19
    枚举编译创建一个类:FruitEnum继承自java.lang.Enum定义的枚举被声明为public static final类型常量FruitEnum$VALUES数组,保存常量APPLE和ORANGE创建两个对象,常量引用这个两个对象两个静态方法:values()拷贝一...
  • 什么是序列化,可能大家都知道,但又不很清楚,呵呵,就像我一样,下面是一段百度百科的说明,说的很清楚,可以参考下序列化 (serialization)将对象的状态信息转换为可以存储或传输的窗体的过程。在序列化期间,对象...
  • 序列化和反序列序列化是通过某种算法将存储于内存中的对象转换...后端需要返回 JSON 数据,这就是后端将 Java 堆中的对象序列化为了 JSON 数据传给前端,前端可以根据自身需求直接使用或者将其反序列化为 JS 对象R...
  • 您希望序列化将序列化流中的内容与内存中的合并。对于Java序列化来说这是不可能的,因为它控制着要创建的对象。您可以读取序列化对象,然后手动编写代码以合并要合并的字段。如果你坚持使用Java序列化(如果我是你...
  • Java IO篇:序列化与反序列

    千次阅读 2022-01-12 03:22:50
    所以序列化就是把 Java 对象变成二进制形式,本质上就是一个byte[]数组。将对象序列化之后,就可以写入磁盘进行保存或者通过网络中输出给远程服务了。反之,反序列化可以从网络或者磁盘中读取的字节数组,反序列化成...
  • Java序列化详解

    2022-04-05 14:42:32
    Java序列化机制详解
  • * 获取指定 key 的自增序列值 * @param key redis key * @return 自增序列值 */ public Long getIncreaseSeq(String key) { Long currentValue = valueOperations.increment(key); if (currentValue == null) { ...
  • Java 多线程通过 Mybatis 获取 Oracle 序列值重复问题处理 在同一个事务内开多线程访问序列值时,会取出同一个值。 select mySequence.nextval from dual 解决方法是将查询语句放在一个新事务中,同时增加同步...
  • JAVA中JSON序列化和反序列化1 FASTJSON的序列化和反序列化1.1 主函数1.2 自定义对象2 GSON序列化和反序列化2.1 主函数2.2 自定义对象总结 不同包序列化和反序列化的方式不同,其修改对象属性名称的注释也不相同。 1...
  • 详解JAVA序列

    千次阅读 2021-02-12 16:12:20
    现在开发过程中经常遇到多个进程多个服务间需要交互,或者不同语言的服务之间需要交互,这个时候,我们一般选择使用固定的协议,将数据传输过去,但是在很多语言,比如java等jvm语言中,传输的数据是特有的类对象,...
  • java 序列

    2021-03-19 09:23:50
    java 序列化对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。序列化一般用于以下场景:1.永久性保存对象,保存对象的字节序列到本地文件中;2.通过序列化对象...
  • 浅谈Java序列

    2021-04-12 15:27:14
    序列化是将一个对象的状态,各属性的值序列化保存起来,然后在合适的时候通过反序列获得Java序列化是将一个对象表示成字节序列,该字节序列包括了对象的数据,有关对象的类型信息和存储在对象中的数据类型。...
  • public enum FruitEnum {APPLE, ORAGE}上面的代码定义了一个FruitEnum类型,是最...字节码:public final class com.taobao.tianxiao.FruitEnum extends java.lang.Enum............{public static final com.taobao...
  • [Java教程]表单中单选、多选、选择框获取及表单的序列化0 2015-12-17 13:00:11总结了下在表单处理中单选、多选、选择框获取及表单的序列化,写成了一个对象。如下:1 var formUtil = { 2 // 获取单选按钮的...
  • 谈到java序列化其实大家都能说出一二, java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些再生成相同状态的对象。对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种...
  • 7-java安全——java序列化CC1链分析

    千次阅读 2021-07-04 14:49:14
    apache commons-collections组件反序列化漏洞的反射链也称为CC链,自从apache commons-collections组件爆出java第一个反序列化漏洞后,就像打开了新世界大门一样,之后很多java中间件也相继爆出反序列化漏洞。...
  • Java对象序列化详解

    万次阅读 多人点赞 2016-08-10 14:47:32
    一、定义 序列化:把Java对象转换为字节序列的过程。    反序列化:把字节序列恢复为Java对象的过程。二、用途 对象的序列化主要有两种用途:    1) 把对象的字节序列永久地保存到硬盘上,通常存放在一...
  • 简单记录一下java处理redis的几种序列化策略,这里使用的环境是springboot 2.0.4springboot中提供了StringRedisTemplate和RedisTemplate两种序列化类,它们都只能读自己存的数据,即数据互不相通。主要区别如下:1、...
  • Java和JSON-使用ObjectMapper的Jackson示例 该存储库包含博客文章中使用的代码示例...Jackson-使用JsonNode反序列 杰克逊–反序列化为简单的Java对象 Jackson –使用Empty Constructor反序列化为简单的Java对象 Ja
  • 以 Jackson 为例,展示几个 Java 对象序列化时容易忽略的问题。What happend看个例子@Data@ToString@Builderpublic class Person {private String name;private Integer age;private boolean isStudent;private ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 276,191
精华内容 110,476
关键字:

java获取序列值

java 订阅