zoukankan      html  css  js  c++  java
  • JDBC 2.0中的高级数据类型

    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();


    (T111)

    本文选自飞思图书《精通Java核心技术》
  • 相关阅读:
    CSS3 target伪类简介
    不用position,让div垂直居中
    css3 在线编辑工具 连兼容都写好了
    a标签伪类的顺序
    oncopy和onpaste
    【leetcode】1523. Count Odd Numbers in an Interval Range
    【leetcode】1518. Water Bottles
    【leetcode】1514. Path with Maximum Probability
    【leetcode】1513. Number of Substrings With Only 1s
    【leetcode】1512. Number of Good Pairs
  • 原文地址:https://www.cnblogs.com/neozhu/p/97948.html
Copyright © 2011-2022 走看看