首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

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

2013-05-02 
Serializable和传统的Jdbc的性能问题??大神进小弟用序列化操作数据库的时候,想到一个问题,是序列化直接以b

Serializable和传统的Jdbc的性能问题??大神进
小弟用序列化操作数据库的时候,想到一个问题,是序列化直接以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
);





[解决办法]
jdbc,好,特别是oracle的jdbc实现,批量操作,性能是很快的
[解决办法]
jdbc  肯定比hibernate快,有时候性别差别多达几百倍, 因为 hibernate是建立在jdbc基础上实现的orm 数据持久框架,, jdbc的时候 sql语句,异常捕捉,获取数据库连接,释放连接,封装对象 这些操作都是自己写死在代码块中,,现在可以用hibernate他来通通帮我们来处理,,

热点排行