• Bolb存储照片


    import java.io.File;   
    import java.io.FileInputStream;   
    import java.io.FileOutputStream;   
    import java.io.IOException;   
    import java.io.InputStream;   
    import java.io.OutputStream;   
    import java.sql.*;   
      
      
    public class BlobTest {   
        public static void main(String args[]){   
            Connection conn = null;   
            Statement stmt = null;   
            PreparedStatement ps = null;   
            ResultSet rs = null;   
               
            try {   
                Class.forName("oracle.jdbc.driver.OracleDriver");                      
                //获取数据库对象   
                conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","用户名","密码"); 
                conn.setAutoCommit(false);  
                
                //表存在则删除它   
                String sql = "DROP TABLE IF EXISTS blobtest";//MySql
            
                sql = "declare num number; begin"+
                " select count(1) into num from user_tables where table_name = upper('blobtest');"+
                " if num > 0 then execute immediate 'drop table blobtest' ; end if;"+
                " end;";//Orcl
                
                stmt = conn.createStatement();   
                System.out.println(sql);   
                stmt.executeUpdate(sql);   
                //创建表   
                sql = "CREATE TABLE blobtest(" +    
                "b_id INT NOT NULL ,"+   
                "b_title VARCHAR(50),"+   
                "b_text Blob"  +
                ")";   
                    
                System.out.println(sql);   
                stmt.executeUpdate(sql);   
                System.out.println("创建数据表成功!");   
                   
                sql="INSERT INTO blobtest(B_ID,b_title,b_text)VALUES(?,?,?)";   
                ps = conn.prepareStatement(sql);   
                //插入图片  
                File file = new File("d://1.JPG");   
                InputStream inputStream = new FileInputStream(file);
                   
                //以前的时候直接使用setBinaryStream就可以保存图片,但   
                //数据库的字符集换成 gbk后就不能用了,一直提示参数类型不匹配,在网上查了一下,   
                //直接向数据库中存byte可解决   
                //ps.setString(1, file.getName());   
                //ps.setBinaryStream(2,inputStream,file.length());   
                //ps.executeUpdate();   
                try {
                    ps.setString(1, "1");   
                    ps.setString(2, file.getName());   
                    //新建一byte数组   
                    byte[] buf=new byte[inputStream.available()];   
                    //将文件读入到byte[]中   
                    inputStream.read(buf);   
                    ps.setBytes(3, buf);   
                    ps.executeUpdate();   
                    System.out.println("插入成功!");   
                } catch (IOException e1) {   
                    System.out.println("保存图片到数据库成功!");   
                    e1.printStackTrace();   
                }   
                conn.commit();  
                   
                   
                //读取数据   
                sql = "SELECT b_title,b_text FROM blobtest";   
                ps = conn.prepareStatement(sql);   
                rs = ps.executeQuery();   
                while(rs.next()){   
                    System.out.println("图片名: "+rs.getString("b_title"));   
                    Blob blob = rs.getBlob("b_text");   
                    File file2 = new File("d://2.jpg");   
                    OutputStream outputStream = new FileOutputStream(file2);   
                    try {   
                        outputStream.write(blob.getBytes(1,(int)blob.length()));   
                    } catch (IOException e) {   
                        e.printStackTrace();   
                    }   
                    //打印出来的为对象   
                    System.out.println("图片内容: "+ blob.getBinaryStream());   
                       
                }   
            } catch (Exception e) {   
                e.printStackTrace();     
            }finally{   
                
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }   
            }   
               
        }   
      
    } 

    第二种:

    import java.sql.*;  
    import oracle.sql.*;  
    import java.io.*;  
    
    import oracle.jdbc.driver.OracleResultSet;  
    
    public class WriteBlob {  
        public static void main(String[] args) {  
            try {  
                // 连接数据库
                Class.forName("oracle.jdbc.driver.OracleDriver");                      
                Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","用户名","密码");  
                conn.setAutoCommit(false);  
                
                //获取源照片数据  
                BLOB blob = null;  
                String fileName = "d://wenpaiyi//1.JPG";  
                File f = new File(fileName);  
                
                //先插入一条记录,用于后面获得一个Blob对象  
                PreparedStatement pstmt = conn.prepareStatement("insert into blobtest(b_id,b_text) values(?,empty_blob())");  
                pstmt.setString(1,"1");  
                pstmt.executeUpdate();  
                pstmt.close();  
                
                // 获得Blob对象(由于Blob是接口,不能实例化,所以只好用这种曲折方法获得)  
                pstmt = conn.prepareStatement("SELECT b_text FROM blobtest WHERE trim(b_id)=? ");  
                pstmt.setString(1,"1");  
                ResultSet rset = pstmt.executeQuery();  
                if (rset.next()){ 
                    blob = (BLOB)rset.getBlob(1);  
                }
                pstmt.close();  
                if (blob == null){  
                    System.out.println("blob is null");  
                    conn.close();  
                    return ;  
                }  
                
                // 填充Blob值,用于提交到数据库  
                FileInputStream fin = new FileInputStream(f);  
                System.out.println("file size = " + fin.available());  
                OutputStream out = blob.getBinaryOutputStream();  
                byte[] data = new byte[(int)fin.available()];  
                // 获取  
                fin.read(data);  
                out.write(data);  
                // 关闭资源    
                fin.close();  
                out.close(); 
                
                // 插入数据库  
                pstmt = conn.prepareStatement("update blobtest set b_text=? where b_id=?");  
                pstmt.setBlob(1,blob);  
                pstmt.setString(2,"1");  
                pstmt.executeUpdate();  
                pstmt.close();  
                // 提交  
                conn.commit(); 
                
                //---------------------------------------------------读取-------------------------------------
                String readSql = "SELECT b_text FROM blobtest WHERE trim(b_id)=? ";  
                PreparedStatement ps = conn.prepareStatement(readSql);  
                ps.setString(1, "1");  
                ResultSet rs = ps.executeQuery();  
                while (rs.next()) {  
                    Blob image = rs.getBlob("b_text");  
                    DataOutputStream dos =   
                        // 在FileOutputStream中指定文件输出路径  
                        new DataOutputStream(new FileOutputStream(new File("d://wenpaiyi//2.JPG")));  
                    InputStream fis = image.getBinaryStream();  
                    int out1;  
                    byte[] outByte = new byte [100];  
                    // 将blob对象输入流写入本地输出流中  
                    while ((out1 = fis.read(outByte)) != -1) {  
                        dos.write(outByte);  
                    }  
                    fis.close();  
                    dos.flush();  
                    dos.close();  
                }  
                rs.close();  
                ps.close();  
                
                //---------------------------------------------------读取------------------------------------- 
                pstmt = conn.prepareStatement("SELECT b_text FROM blobtest WHERE trim(b_id)=? ");  
                pstmt.setString(1,"1");  
                rset = pstmt.executeQuery();  
                if (rset.next()){
                    blob = (BLOB)((OracleResultSet)rset).getBLOB(1);  
                }
                pstmt.close();  
                if (blob == null){  
                    System.out.println("blob2 is null");  
                    conn.close();  
                    return ;  
                }  
                // 输出到磁盘  
                // 获得  
                FileOutputStream fout = new FileOutputStream(new File("d://wenpaiyi//3.JPG"));  
                InputStream in = blob.getBinaryStream();  //asciiStreamValue()
                
                int out2 ;
                byte [] outbyte = new byte [100];
                
                while((out2 = in.read(outbyte)) != -1){
                    fout.write(outbyte);
                }
                in.close();
                fout.flush();
                fout.close();
                
                conn.close();  
                // 打开  
                //Process pro = Runtime.getRuntime().exec("cmd /c start D:\2.jpg");  
            }catch   (SQLException   e)   {  
                System.err.println(e.getMessage());  
                e.printStackTrace();  
            }catch(IOException   e)   {  
                System.err.println(e.getMessage());  
            }catch(ClassNotFoundException   e){  
                e.printStackTrace();  
            }  
        }  
    }
  • 相关阅读:
    *Integer to English Words
    *Palindrome Linked List
    *Partition List
    Sort Colors
    wireshark tls
    find 路径必须在表达式之前
    http://mozilla.debian.net/
    maven bundle
    xmpp
    xmlns=""
  • 原文地址:https://www.cnblogs.com/zdf159/p/7511471.html
Copyright © 2020-2023  润新知