-
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();
}
}
更多相关内容 -
JAVA 不知道怎么写,就是获取新增的数据库seq序列值。
2021-03-08 22:09:18该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 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.....大神写一句来助我,我是菜鸟~
-
java 序列化对象 serializable 读写数据的实例
2021-03-15 02:56:49package ...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种方法
2020-09-05 02:53:09介绍了Java获取最后插入MySQL记录的自增ID值的3种方法,有需要的朋友可以参考需要 -
java对象序列化为字符串
2021-03-06 02:37:081 场景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等语言内置的序列化方法,将一个对象转化成一串二进制 -
java – 如何在分布式环境中预取Oracle序列ID-s
2021-02-28 06:43:46我有一个在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()拷贝一... -
java 序列化实现方式总结
2021-03-05 15:34:04什么是序列化,可能大家都知道,但又不很清楚,呵呵,就像我一样,下面是一段百度百科的说明,说的很清楚,可以参考下序列化 (serialization)将对象的状态信息转换为可以存储或传输的窗体的过程。在序列化期间,对象... -
Java 序列化和反序列化的底层原理
2021-03-14 13:51:18序列化和反序列化序列化是通过某种算法将存储于内存中的对象转换...后端需要返回 JSON 数据,这就是后端将 Java 堆中的对象序列化为了 JSON 数据传给前端,前端可以根据自身需求直接使用或者将其反序列化为 JS 对象R... -
防止Java序列化设置默认值
2021-03-10 01:52:30您希望序列化将序列化流中的内容与内存中的值合并。对于Java序列化来说这是不可能的,因为它控制着要创建的对象。您可以读取序列化对象,然后手动编写代码以合并要合并的字段。如果你坚持使用Java序列化(如果我是你... -
Java IO篇:序列化与反序列化
2022-01-12 03:22:50所以序列化就是把 Java 对象变成二进制形式,本质上就是一个byte[]数组。将对象序列化之后,就可以写入磁盘进行保存或者通过网络中输出给远程服务了。反之,反序列化可以从网络或者磁盘中读取的字节数组,反序列化成... -
Java序列化详解
2022-04-05 14:42:32Java序列化机制详解 -
Java 实现 Redis 自增序列获取
2021-05-08 10:48:39* 获取指定 key 的自增序列值 * @param key redis key * @return 自增序列值 */ public Long getIncreaseSeq(String key) { Long currentValue = valueOperations.increment(key); if (currentValue == null) { ... -
Java 多线程通过 Mybatis 获取 Oracle 序列值重复问题处理
2018-09-06 13:28:55Java 多线程通过 Mybatis 获取 Oracle 序列值重复问题处理 在同一个事务内开多线程访问序列值时,会取出同一个值。 select mySequence.nextval from dual 解决方法是将查询语句放在一个新事务中,同时增加同步... -
JAVA中JSON序列化和反序列化
2022-03-21 14:08:21JAVA中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:50java 序列化对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。序列化一般用于以下场景:1.永久性保存对象,保存对象的字节序列到本地文件中;2.通过序列化对象... -
浅谈Java序列化
2021-04-12 15:27:14序列化是将一个对象的状态,各属性的值序列化保存起来,然后在合适的时候通过反序列化获得。Java的序列化是将一个对象表示成字节序列,该字节序列包括了对象的数据,有关对象的类型信息和存储在对象中的数据类型。... -
Java中Enum类型的序列化
2021-02-12 18:20:19public enum FruitEnum {APPLE, ORAGE}上面的代码定义了一个FruitEnum类型,是最...字节码:public final class com.taobao.tianxiao.FruitEnum extends java.lang.Enum............{public static final com.taobao... -
[Java教程]表单中单选、多选、选择框值的获取及表单的序列化
2021-03-10 02:51:10[Java教程]表单中单选、多选、选择框值的获取及表单的序列化0 2015-12-17 13:00:11总结了下在表单处理中单选、多选、选择框值的获取及表单的序列化,写成了一个对象。如下:1 var formUtil = { 2 // 获取单选按钮的... -
java序列化和序列化ID的作用
2021-02-26 10:06:38谈到java序列化其实大家都能说出一二, java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象。对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种... -
7-java安全——java反序列化CC1链分析
2021-07-04 14:49:14apache commons-collections组件反序列化漏洞的反射链也称为CC链,自从apache commons-collections组件爆出java第一个反序列化漏洞后,就像打开了新世界大门一样,之后很多java中间件也相继爆出反序列化漏洞。... -
Java对象序列化详解
2016-08-10 14:47:32一、定义 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。二、用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一... -
java处理redis的几种序列化策略
2021-02-12 20:12:45简单记录一下java处理redis的几种序列化策略,这里使用的环境是springboot 2.0.4springboot中提供了StringRedisTemplate和RedisTemplate两种序列化类,它们都只能读自己存的数据,即数据互不相通。主要区别如下:1、... -
jackson-serialization-examples:常用的Java JSON序列化示例
2021-04-27 13:49:27Java和JSON-使用ObjectMapper的Jackson示例 该存储库包含博客文章中使用的代码示例...Jackson-使用JsonNode反序列化值 杰克逊–反序列化为简单的Java对象 Jackson –使用Empty Constructor反序列化为简单的Java对象 Ja -
Java 对象序列化时的问题
2021-03-08 09:07:04以 Jackson 为例,展示几个 Java 对象序列化时容易忽略的问题。What happend看个例子@Data@ToString@Builderpublic class Person {private String name;private Integer age;private boolean isStudent;private ...