当前位置: 首页 > 图文教程 > Java技术 > Java基础 > JDBC 2.0中的高级数据类型

Java基础
体验Java 1.5中面向(AOP)编程
Java中基于Aspectwerkz的AOP
2004开发技术年度综述之Java世界
JavaBeans程序开发
开发基于Java的图形用户界面
Java加密和数字签名编程
Java应用程序中创建图像
初探Java类加载机制
EJB3.0之实体Bean的继承
javamail收取Hotmail的退信
JavaMail访问Hotmail邮箱
EJB3.0开发之多对多和一对一
EJB 3.0开发指南之多表映射
EJB组件与可重用性的矛盾
J2SE中的序默认序列化
Java操作文本文件的方法
Java多线程编程之限制优先级
EJB 3.0 开发指南之定时服务
J2SE中的序列化之继承
J2SE中的序列化的认识

Java基础 中的 JDBC 2.0中的高级数据类型


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 104 ::
收藏到网摘: n/a

  JDBC 2.0中提供了对SQL3标准中引入的新的数据类型,如Blob(binary large object)、Clob(character large object)、Array 对象、REF(对象参考,object reference)和 UDT(用户定义数据类型,user-defined datatype)等的支持。这些新的数据类型结合在一起,使得数据库设计人员可以创建更丰富的模式,并简化了对复杂数据的处理和持久化。

  例如,我们要向tbl_User表中插入用户的照片,这时就可以使用流将Blob对象导入数据库中:

  String sql = "intsert into tbl_User values(?, ?)";
  PreparedStatement pstmt = con.prepareStatement(sql) ;

  File file = new File("C:/images/photo.jpg") ;
  FileInputStream fis = new FileInputStream(file);

  pstmt.setString(1, "John");
  pstmt.setBinaryStream(2, fis, (int)file.length());

  pstmt.executeUpdate();

  pstmt.close();
  fis.close();

  其中SQL语句的第一个参数为用户名,第二个参数为photo,它是一个Blob型对象。这样在将数据插入数据库之后,我们就可以用程序获取该数据了:

  String sql = "select photo from tbl_User where username = ?";
  PreparedStatement pstmt = con.prepareStatement(selectSQL) ;

  pstmt.setString(1, "John");
  ResultSet rs = pstmt.executeQuery() ;

  rs.next();
  Blob blob = rs.getBlob("photo") ;

  ImageIcon icon = new ImageIcon(blob.getBytes(1, (int)blob.length())) ;
  JLabel photo = new JLabel(icon);

  rs.close();
  pstmt.close();

  类似地,我们也可以对Clob对象进行相应的操作。下面是一个从 ASCII 流中直接将 Clob对象插入数据库中的例子:

  String sql = "insert into tbl_Articles values(?,?)";
  PreparedStatement pstmt = con.prepareStatement(sql) ;

  File file = new File("C:/data/news.txt") ;
  FileInputStream fis = new FileInputStream(file);

  pstmt.setString(1, "Iraq War");
  pstmt.setAsciiStream(2, fis, (int)file.length());

  pstmt.executeUpdate();

  pstmt.close();
  fis.close();

  同样,我们也可以用类似的方法将Clob对象从数据库中取出:

  String sql = "select content from tbl_Articles where title = ?";
  PreparedStatement pstmt = con.prepareStatement(sql) ;

  pstmt.setString(1, "Iraq War");
  ResultSet rs = pstmt.executeQuery() ;

  rs.next() ;
  Clob clob = rs.getClob("content") ;

  InputStreamReader in = new InputStreamReader(clob.getAsciiStream()) ;

  JTextArea text = new JTextArea(readString(in)) ;

  rs.close();
  pstmt.close();