net读取java序列化,java序列化之将一个对象保存到mysql数据库并读取出来详细步骤...

java序列化之将一个对象保存到mysql数据库并读取出来

序列化:将 Java 对象转换成字节流的过程(二进制数据)。

反序列化:将字节流转换成 Java 对象的过程。

基本思路:将一个实现序列化接口的类的实体类,保存到一个byte[]数组中,然后写入到mysql数据 库,数据类型是二进制类型

序列化优点:

1.方便传输,速度快,还很安全,被调用方序列化,调用方反序列化即可拿到传输前最原始的java对象,常用于不同进程之间的对象传输

2.方便存储,不管是存储成文件还是数据库,都行,存储为文件,下回要用可以直接反序列拿到对象

序列化与反序列化

1.java代码:

1.1自定义的类并implments Serializable

public class Account {

private Integer id;

private String username;

private String password;

private byte[] excelfield;//从数据库读取二进制数据并保存到这里

public Account() {

}

public Account(String username, String password) {

this.id = id;

this.username = username;

this.password = password;

}}

public class NamesList implements Serializable {

private static final long serialVersionUID = 828776519500192025L;

private ArrayList> allNames = null;//自定义数据!

public NamesList() {

allNames = new ArrayList<>();

}

}

1.2写一个方法将一个实体类写入数据库:

public static void saveToDb(NamesList test) throws IOException {

byte[] std;

/*关键步骤:将对象变成二进制数组。使用对象输出流将对象

写入ByteArrayOutputStream里再使用toByteArry()变成byte数组

然后存到数据库*/

ByteArrayOutputStream byt=new ByteArrayOutputStream();

ObjectOutputStream obj=new ObjectOutputStream(byt);

obj.writeObject(test);

std=byt.toByteArray();

//这里使用的是JdbcTemplate 存入数据库

JdbcTemplate jdbcTemplate = new JdbctempUtils().jdbcTemplate;

/*下面excelfield 的数据类型是:Bolb

TinyBlob:最大 255

Blob:最大 65KB

MediumBlob:最大 16MB

LongBlob:最大 4GB*/

String sql = "update user set excelfield=? where username='1044204723'";

int count = jdbcTemplate.update(sql, std);

System.out.println(count);

}

1.3写一个方法将数据从数据库读取出来:

public static void readDb() throws IOException, ClassNotFoundException {

JdbcTemplate jdbcTemplate = new JdbctempUtils().jdbcTemplate;

String sql = "select * from user where username=1044204723 ";

//查询并封装成自定义对象,注意:自定义对象一定包含保存在数据库中的二进制的列的名字

List query =jdbcTemplate.query(sql, new BeanPropertyRowMapper(Account.class));

System.out.println("查询到的数据是:" +query.size()+query.get(0)+ query.get(0).getExcelfield());

//输出数据字节数量

System.out.println(query.get(0).getExcelfield().length);

//取出二进制数据

byte[] ob=query.get(0).getExcelfield();

//将取出的二进制数据反序列化成序列化的对象,依旧使用对象流处理

ByteArrayInputStream byteInt=new ByteArrayInputStream(ob);

ObjectInputStream objInt=new ObjectInputStream(byteInt);

NamesList o=(NamesList)objInt.readObject();

//遍历数据是否正确

for (ArrayList list : o.allNames) {

for (Namex name : list

) {

System.out.println(name);

}

}

}

------------小白代码笑纳啦!----

标签:java,对象,数据库,query,mysql,new,序列化,public

来源: https://blog.csdn.net/weixin_43505211/article/details/106940069

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值