处理大数据对象(1.处理 CLOB 2. 数据处理 BLOG )

大数据对象处理主要有 CLOBcharacter large objectBLOBbinary large object两种类型的字段;



CLOB中可以储存大字符数据对象,eg 长篇小说。

BLOB中可以存放二进制大数据对象,eg图片,电影,音乐;


首先说一点公共的东西:

1.数据库连接代码:

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class DbUtil {
	public static Connection getConn(){
		Connection con=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	
	public static void close(Connection con,PreparedStatement stam,ResultSet rs) throws SQLException{
		if(rs!=null){
			rs.close();
		}
		if(stam!=null){
			stam.close();
		}
		if(con!=null){
			con.close();
		}
	}
	
	public static void main(String []args){
		DbUtil dbUtil=new DbUtil();
		Connection con =dbUtil.getConn();
		if(con!=null){
			System.out.println("数据库连接成功");
		}else{
			System.out.println("数据库连接失败");
		}
	}
}

2.设计的model

import java.io.File;

public class upload2 {
	private File context;
	private File pic;
	
	public upload2(File context,File pic){
		super();
		this.context=context;
		this.pic=pic;
	}
	
	public File getContext() {
		return context;
	}
	public void setContext(File context) {
		this.context = context;
	}
	public File getPic() {
		return pic;
	}
	public void setPic(File pic) {
		this.pic = pic;
	}
	
	
}

3.方法类dao

package dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;

import model.upload2;
import util.DbUtil;

public class upload {
	static DbUtil dbUtil=new DbUtil();
	
	public static int add(upload2 upload) throws Exception{
		Connection con=dbUtil.getConn();
		String sql="insert into plat values(null,?,?)";
		PreparedStatement pst=con.prepareStatement(sql);
		File context=upload.getContext(); // 获取文件
		InputStream inputStream=new FileInputStream(context);
		pst.setAsciiStream(1, inputStream,(int) context.length()); 
		File pic=upload.getPic(); // 获取图片文件
		InputStream inputStream2=new FileInputStream(pic);
		pst.setBinaryStream(2, inputStream2, (int) pic.length());
		int result=pst.executeUpdate();
		con.close();
		return result;
	}
	
	//测试类
	public static void main(String[] args)throws Exception {
	        //这里有个bug,记住了context内容中不能有中文,因为前面setAsciiStream,Ascii你懂的。
		File context=new File("F:/ce.txt");
		File pic=new File("F:/ce.jpg");
		upload2 upload=new upload2(context,pic);
		int result=add(upload);
		if(result==1){
			System.out.println("添加成功!");
		}else{
			System.out.println("添加失败!");
		}
	}
}

4.数据库里的信息读取

public static void getBook(int id)throws Exception{
		Connection con=dbUtil.getCon();
		String sql="select * from plat where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setInt(1, id);
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			Clob c=rs.getClob("context");
			String context=c.getSubString(1, (int)c.length());
			Blob b=rs.getBlob("pic");
			FileOutputStream out=new FileOutputStream(new File("d:/pic2.jpg"));
			out.write(b.getBytes(1, (int)b.length()));
			out.close();

		}
		dbUtil.close(pstmt, con);
	}

5.说说数据库中的2进制图片如何在jsp页面上显示

String sql="select * from plat where id=?";
    PreparedStatement pstmt;
	try {
		pstmt = con.prepareStatement(sql);
		pstmt.setInt(1, 1);
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			Blob b=rs.getBlob("pic");//得到图片的2进制数据
			InputStream is = b.getBinaryStream();//写入输入流中
			response.setContentType("image/jpeg");//告诉jsp页面这是一个图片
			OutputStream os = response.getOutputStream(); //设置一个输出流
			int num = (int) b.length(); 
			byte buf[] = new byte[num]; 
			//下面就是把输出输出到页面。
			while ((num = is.read(buf)) != -1) { 
			os.write(buf); 
			os.close();
	       }
}。。


你可能感兴趣的:(处理大数据对象(1.处理 CLOB 2. 数据处理 BLOG ))