Serializable和传统的Jdbc的性能问题??大神进

balabala_sean 2013-04-14 03:23:43
小弟用序列化操作数据库的时候,想到一个问题,是序列化直接以binary流操作起来快,还是传统的jdbc快呢?而且用hibernate的时候,entity都是先了serializable,但是H好像没用序列化来操作啊。

一下是自己写的简单的案例:

PersonDetails:

package com.sean.dao;

import java.io.Serializable;


public class PersonDetails implements Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String sex;
public PersonDetails(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}




PersonPersist:

package com.sean.dao;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class PersonPersist {

static String userid = "zndt", password = "123456";
static String url = "jdbc:sqlserver://localhost:1433; DatabaseName=learning";
static int count = 0;
static Connection con = null;
public static void main(String[] args) {
Connection con = getOracleJDBCConnection();
PersonDetails person1 = new PersonDetails("hemanth", 10, "Male");
PersonDetails person2 = new PersonDetails("bob", 12, "Male");
PersonDetails person3 = new PersonDetails("Richa", 10, "Female");
PreparedStatement ps;
try {
ps = con
.prepareStatement("INSERT INTO SerialTest VALUES (?, ?)");
write(person1, ps);
ps.execute();
write(person2, ps);
ps.execute();
write(person3, ps);
ps.execute();
ps.close();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM SerialTest");
while (rs.next()) {
Object obj = read(rs, "person");
PersonDetails p = (PersonDetails) obj;
System.out.println(p.getName() + "\t" + p.getAge() + "\t"
+ p.getSex());
}
rs.close();
st.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void write(Object obj, PreparedStatement ps)
throws SQLException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(baos);
oout.writeObject(obj);
oout.close();
ps.setBytes(1, baos.toByteArray());
ps.setInt(2, ++count);
}
public static Object read(ResultSet rs, String column)
throws SQLException, IOException, ClassNotFoundException {
byte[] buf = rs.getBytes(column);
if (buf != null) {
ObjectInputStream objectIn = new ObjectInputStream(
new ByteArrayInputStream(buf));
return objectIn.readObject();
}
return null;
}
public static Connection getOracleJDBCConnection() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try {
con = DriverManager.getConnection(url, userid, password);
} catch (SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}
return con;
}
}





MSSQL:


create table SerialTest(
person binary(500),
count int
);




...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
balabala_sean 2013-04-14
  • 打赏
  • 举报
回复
引用 6 楼 fei1710 的回复:
序列化一般是为了JAVA对象的保存和网络传输,跟数据库没有关系
您说的这点我也知道,是类似分布式的系统么?
fei1710 2013-04-14
  • 打赏
  • 举报
回复
序列化一般是为了JAVA对象的保存和网络传输,跟数据库没有关系
balabala_sean 2013-04-14
  • 打赏
  • 举报
回复
引用 4 楼 fei1710 的回复:
序列化后的数据量明显比原先的多嘛,数据库存储量和网络传输时间都增加了,而且还不能检索了。
那为什么还提供serializable,这个在什么场景下会用到?
fei1710 2013-04-14
  • 打赏
  • 举报
回复
序列化后的数据量明显比原先的多嘛,数据库存储量和网络传输时间都增加了,而且还不能检索了。
  • 打赏
  • 举报
回复
jdbc 肯定比hibernate快,有时候性别差别多达几百倍, 因为 hibernate是建立在jdbc基础上实现的orm 数据持久框架,, jdbc的时候 sql语句,异常捕捉,获取数据库连接,释放连接,封装对象 这些操作都是自己写死在代码块中,,现在可以用hibernate他来通通帮我们来处理,,
zuxianghuang 2013-04-14
  • 打赏
  • 举报
回复
jdbc,好,特别是oracle的jdbc实现,批量操作,性能是很快的
  • 打赏
  • 举报
回复
最快的还是jdbc

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧