zoukankan      html  css  js  c++  java
  • JDBC处理文本和二进制文件

            JDBC支持文本(CLOB)和二进制(BLOB)文件的处理,比如要往数据库里存取文章或者图片。这都是用流的思想来解决的。

            来两个Demo看看JDBC是怎么操作文本和二进制文件的。

            CLOB:

    package com.wxisme.jdbcclob;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    import java.sql.Clob;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Timestamp;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    
    
    /**
     * 数据库中对文本对象的操作。
     * @author wxisme
     *
     */
    
    public class CLOBTest {
    	/**
    	 * 标准时间对象转换成long
    	 * @param date
    	 * @return long
    	 */
    	public static long dateTolong(String date) {
    		DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    		long time = 0;
    		try {
    			time = format.parse(date).getTime();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		
    		return time;
    	}
    	/**
    	 * 向数据库中插入一条带有Clob文本对象字段的记录
    	 */
    	public void test1() {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    		String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
    		try {
    			conn = DriverManager.getConnection(c, "root", "1234");
    			String sql = "insert into student (name,pswd,time,stime,myImg) values(?,?,?,?,?)";
    			ps = conn.prepareStatement(sql);
    			
    			java.sql.Date date = new java.sql.Date(dateTolong("2015-5-14 9:25:32"));
    			Timestamp stime = new Timestamp(dateTolong("2015-5-14 9:25:32"));
    			ps.setString(1, "张三");
    			ps.setString(2, "123456");
    			ps.setDate(3, date);
    			ps.setTimestamp(4, stime);
    			ps.setClob(5, new FileReader("e:" +File.separator + "a.txt"));
    			ps.executeUpdate();
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    	public static void main(String[] args) {
    		
    		//从数据库中读取Clob文本对象并输出
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		Reader r = null;
    		
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    		String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
    		try {
    			conn = DriverManager.getConnection(c, "root", "1234");
    			String sql = "select myImg from student where id=?";
    			ps = conn.prepareStatement(sql);
    			ps.setInt(1, 1);
    			
    			rs = ps.executeQuery();
    			
    			while(rs.next()) {
    				Clob clob = rs.getClob("myImg");
    				r = clob.getCharacterStream();
    				int t = 0;
    				while((t=r.read()) != -1) {
    					System.out.println((char)t);
    				}
    				
    			}
    			
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			try {
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			try {
    				r.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		
    	}
    
    }
    

     BLOB:

    package com.wxisme.jdbcblob;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Blob;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    /**
     * 数据库操作二进制文件 Blob类的使用
     * @author wxisme
     *
     */
    public class BLOBTest {
    	/**
    	 * 向数据库中插入二进制
    	 */
    	public void test1() {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    		String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
    		try {
    			conn = DriverManager.getConnection(c, "root", "1234");
    			String sql = "insert into student (img) values(?)";
    			ps = conn.prepareStatement(sql);
    			ps.setBlob(1, new FileInputStream("e:" + File.separator + "b.jpg"));
    			
    			ps.executeUpdate();
    			
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	public static void main(String[] args) {
    		
    		//从数据库中读取二进制文件并恢复
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		InputStream r = null;
    		OutputStream os = null;
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    		String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";
    		try {
    			conn = DriverManager.getConnection(c, "root", "1234");
    			String sql = "select img from student where id=?";
    			ps = conn.prepareStatement(sql);
    			ps.setInt(1, 3);
    			rs = ps.executeQuery();
    			 
    			os = new FileOutputStream(new File("e:/e.jpg"));
    			while(rs.next()) {
    				Blob blob = rs.getBlob("img");
    				r = blob.getBinaryStream();
    				int t = 0;
    				while((t=r.read()) != -1) {
    					os.write(t);
    				}
    				
    			}
    			
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			try {
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			try {
    				r.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			
    			try {
    				os.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    
  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/wxisme/p/4506485.html
Copyright © 2011-2022 走看看