如何把java对象存入数据库

Python021

如何把java对象存入数据库,第1张

假设有这么个对象

import java.io.Serializable

public class MyObject implements Serializable {

private static final long serialVersionUID = 1L

private int i

public int getI() {

return i

}

public void setI(int i) {

this.i = i

}

}

//测试 的方法如下

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

public class test {

public static void main(String[] args) throws IOException,

ClassNotFoundException {

MyObject obj = new MyObject()

obj.setI(4567)

write(Object2Bytes(obj))

// read()

}

public static void write(byte[] b) throws ClassNotFoundException {

System.out.println(b.length)

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

try {

Connection con = DriverManager.getConnection("jdbc:odbc:temp")

String sql = "insert into tab values(?)"

PreparedStatement pstmt = con.prepareStatement(sql)

pstmt.setBytes(1, b)

pstmt.execute()

pstmt.close()

con.close()

} catch (Exception e) {

e.printStackTrace()

}

}

public static void read() throws ClassNotFoundException {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

try {

Connection con = DriverManager.getConnection("jdbc:odbc:temp")

String sql = "select * from tab"

PreparedStatement pstmt = con.prepareStatement(sql)

ResultSet res = pstmt.executeQuery()

while (res != null &&res.next()) {

byte[] b = res.getBytes("key")

System.out.println(b.length)

MyObject obj = (MyObject) Bytes2Object(b)

System.out.println(obj.getI())

}

pstmt.close()

con.close()

} catch (Exception e) {

e.printStackTrace()

}

}

// 将对象转换成字节数组

public static byte[] Object2Bytes(Object obj) throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream()

ObjectOutputStream oos = new ObjectOutputStream(baos)

oos.writeObject(obj)

return baos.toByteArray()

}

// 将字节数组转换成为对象

public static Object Bytes2Object(byte[] b) throws IOException,

ClassNotFoundException {

ByteArrayInputStream bais = new ByteArrayInputStream(b)

ObjectInputStream ois = new ObjectInputStream(bais)

Object obj = ois.readObject()

return obj

}

}

POJO是一种概念或者接口,身份及作用随环境变化而变化,DTO是经过处理后的PO,可能增加或者减少PO的属性,一个POJO持久化以后就是PO。

一、具体含义:

POJO(plainordinaryjavaobject):简单无规则java对象

传统意义的java对象。就是说在一些Object/RelationMapping工具中,能够做到维护数据库表记录的persisentobject完全是一个符合JavaBean规范的纯Java对象,没有增加别的属性和方法,是最基本的JavaBean,只有属性字段及setter和getter方法。

DAO(dataaccessobject):数据访问对象

是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO,提供数据库的CRUD操作。

二、相关概念:

PO(persistantobject):持久对象

在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。

VO(valueobject):值对象

通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。

TO(TransferObject):数据传输对象

在应用程序不同tie(关系)之间传输的对象

BO(businessobject):业务对象

从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。